【问题标题】:How to pass int parameters in Sql commandText如何在Sql commandText中传递int参数
【发布时间】:2012-09-01 00:43:08
【问题描述】:

如何像SQL命令参数一样传递整数值?

我正在尝试这样:

cmd.CommandText = ("insert_questions '" + 
cmd.Parameters.AddWithValue(store_result,store_result) + "','" + 
cmd.Parameters.AddWithValue(store_title, store_title) + "', '" + 
cmd.Parameters.AddWithValue(store_des, store_des) + "'");

store_result 为 int,其他 2 个参数为字符串类型。

store_result 给出如下错误消息。

参数 1:无法从 'int' 转换为 'string'

在 SP 中,还有一个 int 类型的变量将获取 store_result 的值。

传递 int 参数的正确语法是什么?

谢谢。

【问题讨论】:

  • 不要在您的 int 值周围放置字符串分隔符(但我怀疑这是您的问题中最少的一个)。

标签: c# sql stored-procedures


【解决方案1】:

正确的方法是

using(var connection = new SqlConnection(ConnectionString))
{
    connection.Open();
    using(var command = new SqlCommand("SELECT * FROM Table WHERE ID=@someID",connection))
    {
        command.Parameters.AddWithValue("someID",1234);
        var r = command.ExecuteQuery();
    }
}

这意味着它甚至适用于文本查询。使用存储过程更容易 - 而不是 sql 查询,您只需提供存储过程名称:

using(var connection = new SqlConnection(ConnectionString))
{
    connection.Open();
    using(var command = new SqlCommand("insert_sproc",connection))
    {
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.AddWithValue("someID",1234);
        var r = command.ExecuteQuery();
    }
}

【讨论】:

    【解决方案2】:

    应该是这样的,

    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = ("insert_questions") ;
    cmd.Parameters.AddWithValue("@value", valueHere);
    cmd.Parameters.AddWithValue("@value2", valueHere);
    

    注意@value@value2 是在存储过程中声明的参数。

    【讨论】:

      【解决方案3】:

      试试这个:

              cmd.CommandText = ("insert_questions @store_result, @store_title, @store_des");
              cmd.Parameters.AddWithValue("@store_result", store_result);
              cmd.Parameters.AddWithValue("@store_title", store_title);
              cmd.Parameters.AddWithValue("@store_des", store_des);
      

      【讨论】:

        【解决方案4】:

        您不连接 SqlParameter 实例;而是:

        cmd.CommandText = "insert_questions @store_result, @store_title, @store_des";
        cmd.Parameters.AddWithValue("store_result", store_result);
        cmd.Parameters.AddWithValue("store_title", store_title);
        cmd.Parameters.AddWithValue("store_des", store_des);
        

        AddWithValue 中使用的名称在 TSQL 中使用为 @store_result 等。

        如果我们假设inert_questions实际上是一个proc,那么它就更简单了:

        cmd.CommandText = "insert_questions";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("store_result", store_result);
        cmd.Parameters.AddWithValue("store_title", store_title);
        cmd.Parameters.AddWithValue("store_des", store_des);
        

        或者,如果所有这些看起来都很乏味,那么像 dapper-dot-net 这样的工具可以让这一切变得更容易:

        someOpenConnection.Execute("insert_questions",    
              new { store_result, store_title, store_des },
              commandType: CommandType.StoredProcedure);
        

        【讨论】:

          【解决方案5】:
           private void ProcessData(MerchantLead data)
                  {            
                      var cmdCardJournal = new SqlCommand { CommandText = "BusinessLeadsInsert" };
                      var sql = new Sqlquery();
                      sql._cn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
                      cmdCardJournal.Parameters.AddWithValue("@Name", data.FirstName);
                      cmdCardJournal.Parameters.AddWithValue("@LastName", data.LastName);
                      cmdCardJournal.Parameters.AddWithValue("@BusinessName", data.BusinessName);
                      cmdCardJournal.Parameters.AddWithValue("@PhoneNumber", data.PhoneNumber);
                      cmdCardJournal.Parameters.AddWithValue("@Email", data.Email);
                      cmdCardJournal.Parameters.AddWithValue("@Website", data.Website);
                      cmdCardJournal.Parameters.AddWithValue("@OTP", data.OTP);
                      cmdCardJournal.Parameters.AddWithValue("@OTPExpired", DateTime.UtcNow.AddMinutes(30));
          
                      sql.SpCommandExeNon(cmdCardJournal);
          }
          

          【讨论】:

          • 你能再解释一下吗?
          猜你喜欢
          • 1970-01-01
          • 2022-01-15
          • 2017-06-10
          • 1970-01-01
          • 1970-01-01
          • 2020-05-19
          • 1970-01-01
          • 2020-11-12
          • 1970-01-01
          相关资源
          最近更新 更多