C#运行过程而不指定参数名称

时间:2011-03-03 14:08:14

标签: c# asp.net sql-server stored-procedures parameter-passing

如何在不指定参数名称的情况下执行接收参数的存储过程?存储过程中参数的名称可能会从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);

6 个答案:

答案 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)

只能使用OdbcCommandOleDbCommand对象参数来使用未命名参数。

答案 5 :(得分:-2)

您可以使用SQL的exec,它不要求参数名称:

command.CommandText = string.Format(
    "exec dbo.YourProcedure {0}, '{1}'",
    intParameter,
    stringParameter.Replace("'","''")
);
command.ExecuteNonQuery();

如果参数源不可信,请确保在字符串参数中转义单引号。这是在上面的代码段中为stringParameter完成的。