【问题标题】:Sql Parameter CollectionSql参数集合
【发布时间】:2009-01-08 20:02:13
【问题描述】:

我有 5 个参数,我想将它们发送给方法:

public static SqlCommand getCommand(string procedure, SqlParameter[] parameter)
{
   Sqlcommand cmd;
   return cmd
}

我可以像这样一次性发送这些参数吗?

SqlParameterCollection prm;
prm.Add(p1);
prm.Add(p2);
prm.Add(p3);
prm.Add(p4);
prm.Add(p5);
sqlcommand cmd = getCommand(prm);

【问题讨论】:

    标签: c# .net sql parameters


    【解决方案1】:

    或者手动创建一个参数数组:

    SqlParameter[] parameter = {
    new SqlParameter(...), 
    new SqlParameter(...), 
    new SqlParameter(...)
    };
    

    但我看不出你的方法有什么问题。它简单、易读且易于理解。

    【讨论】:

    • 设置 DBNull 值的可为空值是什么?
    【解决方案2】:

    我不明白这有什么问题?您知道吗,如果这是 .NET,您需要将参数附加到 SqlCommand 对象吗?

    所以:

    SqlCommand query = new SqlCommand(sqlString, Connection);
    query.Parameters.AddWithValue(parameter,valueToPass);
    

    等等?

    抱歉,如果这不相关,您的问题不完全确定?你的方法并没有真正做任何事情,我让你省略了代码,只是为了提出问题而放入一个假人?你可以传递一个数组作为参数,所以你只需要把它溢出?

    【讨论】:

    • 如果我有这样的 SqlHelper 方法 int ExecuteNonQuery(string sql, params SqlParameter[] listParams) ?
    【解决方案3】:

    this 为灵感,这段代码对我有用:

    List<SqlCeParameter> parameters = new List<SqlCeParameter>();
    
    parameters.Add(new SqlCeParameter("@Username", NewUsername));
    parameters.Add(new SqlCeParameter("@Password", Password));
    
    cmd.Parameters.AddRange(parameters.ToArray());
    

    【讨论】:

      【解决方案4】:

      好吧,这不会编译,因为在您调用 getCommand 时,您没有在过程中传递字符串,但就数组而言,这应该没问题。

      【讨论】:

        【解决方案5】:

        这是我的代码。您可以使用名称、值、类型等所有参数属性。

        int SelectedListID = 6;
        string selectedPrefix = "IP";
        string sqlQuery = "select * from callHistory where ImportID=@IMPORTID and Prefix=@PREFIX"
        
        SqlParameter[] sParams = new SqlParameter[2]; // Parameter count
        
        sParams[0] = new SqlParameter();
        sParams[0].SqlDbType = SqlDbType.Int;
        sParams[0].ParameterName = "@IMPORTID";
        sParams[0].Value = SelectedListID;
        
        sParams[1] = new SqlParameter();
        sParams[1].SqlDbType = SqlDbType.VarChar;
        sParams[1].ParameterName = "@PREFIX";
        sParams[1].Value = selectedPrefix;
        
        
        SqlCommand cmd = new SqlCommand(sqlQuery, sConnection);
        
        if (sParams != null)
        {
            foreach (SqlParameter sParam in sParams)
            {
                cmd.Parameters.Add(sParam);
                Application.DoEvents();
            }
        }
        

        【讨论】:

          【解决方案6】:

          Form1.cs

              static private void FunctionCall()
              {
          
                  string connectionString = "DATA Source=nwind;server=GRAPHICS\SQLEXPRESS;Persist Security Info=False;Integrated Security=SSPI;Connect Timeout=30";
                  string sSqlQuery;
          
                  DataSet ds;
                  DataTable dt;
          
                  // Prepare SQL Query
                  sSqlQuery = @"
                  select content " +
                  "from " +
                  "[TBL] where id = '000-000'";
          
                  SqlParameter[] sqlParams = {
                          new SqlParameter("",SqlDbType.Int), 
                          new SqlParameter("",SqlDbType.VarChar), 
                          new SqlParameter("",SqlDbType.VarChar)
                  };
          
                  // Read from database
                  ds = SqlHelper.ExecuteNonQuery(connectionString, sSqlQuery, CommandType.Text, sqlParams);
                  dt = ds.Tables[0];
               }
          

          SqlHelper.cs

          // 执行非查询

          public static int ExecuteNonQuery (string connectionString, string cmdText, CommandType type, SqlParameter[] prms)
                  {
                      using (SqlConnection conn = new SqlConnection(connectionString))
                      {
                          using (SqlCommand cmd = new SqlCommand(cmdText, conn))
                          {
                              cmd.CommandType = type;
          
                          if (prms != null)
                          {
                              foreach (SqlParameter p in prms)
                              {
                                  cmd.Parameters.Add(p);
                              }
                          }
                          conn.Open();
                          return cmd.ExecuteNonQuery();
                      }
                  }
              }
          

          【讨论】:

          • 设置 DBNull 值的可为空值是什么?
          【解决方案7】:

          1.

          public IEnumerable<SqlParameter> GetAndSetParameters(List<Tuple<string, string>> parameters){
                      List<SqlParameter> paramlist = new List<SqlParameter>();
          
                      foreach (var item in parameters)
                  {
                      paramlist.Add(new SqlParameter(item.Item1, item.Item2));
                  }
                  return paramlist;
              }
          

          2。传递参数

           public List<Tuple<string, string>> GetUserParameter(){
                  List<Tuple<string, string>> list = new List<Tuple<string, string>>();
                          list.Add(new Tuple<string, string>("@User",user.UserID));
                             return list;
                  }
          

          3。终于用上了:

           SqlCommand oCmd = new SqlCommand(oString, myConnection);
                          oCmd.Parameters.AddRange(GetAndSetParameters(GetUserParameter()).ToArray());
          

          【讨论】:

            猜你喜欢
            • 2014-10-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-01-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多