Sql参数集合

我有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); 

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

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

但我不认为你的方法有什么问题。 它简单,易读,不易丢失。

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

所以:

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

等等?

对不起,如果没有关系,不完全确定您的问题? 你的方法并没有真正做任何事情,我带你遗漏了代码,只是为了提出问题而放入一个假人? 你可以传递一个数组作为争论,所以你只需要将其填满?

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

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

好吧,那将无法编译,因为在你调用getCommand时你没有传入带有该过程的字符串,但就数组而言,这应该没有问题。

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

 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(); } } 

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(); } } } 

1。

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

2.传递参数

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

3.最后使用它:

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