如何在不指定参数名称的情况下执行接收参数的存储过程?存储过程中参数的名称可能会从CustomerID更改为CustID,因此我不想继续更改我的代码。
而不是执行下面提供的指定参数名称的内容 -
command.Parameters.Add("@dtStart", SqlDbType.DateTime);
command.Parameters["@dtStart"].Value = startDate;
command.Parameters.Add("@CustomerID", SqlDbType.NChar);
command.Parameters["@CustomerID"].Value = customerID;
我希望做这样的事情 -
command.Parameters.Add(startDate, customerID);
答案 0 :(得分:16)
存储过程中参数的名称可能会从CustomerID更改为CustID
揍那个人。
参数名称是识别参数的可靠方法。另一种选择是序列,看起来更加片状。
答案 1 :(得分:5)
我认为你不能在没有指定名称的情况下创建SqlParameter
对象。但是,您应该能够使用DeriveParameters
方法(see MSDN)获取参数集合,并自动从SQL服务器中重新获取名称。
您可以找到example here。看起来大致如下:
SqlCommand command = // create a command for calling the stored procedure
SqlCommandBuilder.DeriveParameters(command);
// Now you can set values of parameters in a loop
for(int i = 0; i < command.Parameters.Length; i++) {
var parameter = command.Parameters[i]
// Set value of ith parameter
}
答案 2 :(得分:1)
如果强制将其名称设为null,则可以创建一个无名的SQL参数,或者在将添加到Parameters集合后清空,如下所示:
var par = cmd.CreateParameter();
par.Value = myValue;
cmd.Parameters.Add(par); // this will change the name to "ParameterX"
par.ParameterName = null;
答案 3 :(得分:0)
答案 4 :(得分:0)
只能使用OdbcCommand和OleDbCommand对象参数来使用未命名参数。
答案 5 :(得分:-2)
您可以使用SQL的exec
,它不要求参数名称:
command.CommandText = string.Format(
"exec dbo.YourProcedure {0}, '{1}'",
intParameter,
stringParameter.Replace("'","''")
);
command.ExecuteNonQuery();
如果参数源不可信,请确保在字符串参数中转义单引号。这是在上面的代码段中为stringParameter
完成的。