我想创建一个SqlParameterCollection,但给人的错误,同时增加了一些SqlParameter在sp.Add()法.
请帮我如何添加参数以及如何将其传递给我声明a SqlConnection和的另一个函数SqlCommand.
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 Name>", sp);
Run Code Online (Sandbox Code Playgroud)
我的另一个函数是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;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个SqlParameterCollection并将其传递给insertData函数.但是当我sp.Add()在第一个函数中调用方法时,它会抛出一个错误.
错误是
你调用的对象是空的
Ste*_*eve 50
您不能在不SqlParameterCollection调用其构造函数(new)的情况下使用任何变量(如引用对象),但这SqlParameterCollection是一个无法使用new直接初始化的对象.它没有默认构造函数,只能从existant中检索SqlCommand.
SqlCommand cmd = new SqlCommand(commandText, connection);
SqlParameterCollection sp = cmd.Parameters;
Run Code Online (Sandbox Code Playgroud)
我建议更改您的InsertData方法以接受a List<SqlParameter>并让它处理将参数添加到SqlCommand执行命令文本的参数
List<SqlParameter> sp = new List<SqlParameter>()
{
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);
Run Code Online (Sandbox Code Playgroud)
并且insertData只需接收一个可选的SqlParameter列表,并SqlCommand在需要时将它们添加到内部参数集合中
internal static int insertData(string spName, List<SqlParameter> sp = null)
{
....
if(sp != null)
cmd.Parameters.AddRange(sp.ToArray());
....
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40965 次 |
| 最近记录: |