如何使用多个参数创建SqlParameterCollection?

我正在尝试创建一个SqlParameterCollection ,但在sp.Add()方法中添加一些SqlParameter时会sp.Add()

请帮我如何添加参数以及如何将其传递给我声明SqlConnectionSqlCommand另一个函数。

 SqlParameterCollection sp = null; sp.Add(new SqlParameter("@CmpyCode", SqlDbType.NVarChar)).Value = CV.Global.CMPYCODE; sp.Add(new SqlParameter("@Code", SqlDbType.NVarChar)).Value = codeName; sp.Add(new SqlParameter("@DisplayCode", SqlDbType.NVarChar)).Value = codeName + "-"; sp.Add(new SqlParameter("@TotalDigit", SqlDbType.Int)).Value = CV.Global.PARAMTOTALDIGIT; insertData("", sp); 

我的另一个函数是insertData(…)

 internal static int insertData(string spName, SqlParameterCollection sp) { int retObj = 0; using (SqlConnection con = new SqlConnection(CV.Global.CONSTRING)) { try { con.Open(); SqlCommand cmd = new SqlCommand(spName, con); cmd.CommandType = CommandType.StoredProcedure; if (sp.Count > 0) { foreach (SqlParameter param in sp) cmd.Parameters.Add(param); } retObj = cmd.ExecuteNonQuery(); } catch (Exception ev) { Util.Log(ev); throw; } finally { try { con.Close(); } catch (Exception ev) { Util.Log(ev); throw; } } } return retObj; } 

我正在尝试创建一个SqlParameterCollection并将其传递给insertData函数。 但是当我在第一个函数中调用sp.Add()方法时,它会抛出一个错误。

错误是

你调用的对象是空的

您不能在不调用其构造函数(new)的情况下使用任何变量,如SqlParameterCollection (引用对象),但SqlParameterCollection是无法使用new直接初始化的对象。 它没有默认构造函数,只能从一个存在的SqlCommand检索。

  SqlCommand cmd = new SqlCommand(commandText, connection); SqlParameterCollection sp = cmd.Parameters; 

我建议更改您的InsertData方法以接受List并让它处理将参数添加到执行命令文本的SqlCommand

 List sp = new List() { new SqlParameter() {ParameterName = "@CmpyCode", SqlDbType = SqlDbType.NVarChar, Value= CV.Global.CMPYCODE}, new SqlParameter() {ParameterName = "@Code", SqlDbType = SqlDbType.NVarChar, Value = codeName}, new SqlParameter() {ParameterName = "@DisplayCode", SqlDbType = SqlDbType.NVarChar, Value = codeName + "-"}, new SqlParameter() {ParameterName = "@TotalDigit", SqlDbType = SqlDbType.Int, Value = CV.Global.PARAMTOTALDIGIT} }; insertData(CV.Sps.SP_INSERT_PARAM_TABLE, sp); 

insertData只接收一个可选的SqlParameter列表,并在需要时将它们添加到内部SqlCommand参数集合中

 internal static int insertData(string spName, List sp = null) { .... if(sp != null) cmd.Parameters.AddRange(sp.ToArray()); .... }