gpt4 book ai didi

c# - 如何创建具有多个参数的 SqlParameterCollection?

转载 作者:可可西里 更新时间:2023-11-01 03:03:53 33 4
gpt4 key购买 nike

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

请帮助我如何添加参数以及如何将它传递给我的另一个函数,我在其中声明了一个 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 Name>", 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() 方法时它会抛出错误。

错误是

Object reference not set to an instance of an object

最佳答案

您不能使用任何变量,例如 SqlParameterCollection (一个引用对象)没有调用它的构造函数(新),但是 SqlParameterCollection是一个不能直接用new初始化的对象。它没有公共(public)构造函数,只能从现有 SqlCommand 的属性中检索.

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

我建议更改您的 InsertData接受 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);

insertData简单地接收一个可选的 SqlParameter 列表并将它们添加到内部 SqlCommand如果需要参数收集

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

关于c# - 如何创建具有多个参数的 SqlParameterCollection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23320701/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com