如何创建数组DbParameter []

时间:2011-08-17 18:26:55

标签: c# sql executescalar

手册说应该使用ExecuteScalar方法,如:

public T ExecuteScalar<T>( 
   string commandText,
   CommandType commandType,
   params DbParameter[] parameters
)

但是如何创建参数数组呢?我需要提供我的存储过程2个参数。

5 个答案:

答案 0 :(得分:8)

  • DbParameter是一个抽象类。
  • 由于无法根据用途推断出类型T,因此您必须指定它。
  • 虽然你可以在不创建数组的情况下传递可变数量的参数,但如果你动态创建可变数量的参数,那么数组就是你的朋友。

    var parameters = new[]{
                new SqlParameter(){ ParameterName="foo", Value="hello" },
                new SqlParameter(){ ParameterName="bar", Value="World" }
            };
    x.ExecuteScalar<int>(commandText, commandType, parameters);
    

答案 1 :(得分:4)

parameters参数包含params keyword。这意味着您不必显式创建数组,但可以将可变数量的参数传递给方法:

x.ExecuteScalar(commandText, commandType, parameter1, parameter2);

但是,如果需要,可以显式创建数组并将其传递给方法,如下所示:

DbParameter[] parameters = new DbParameter[] { parameter1, parameter2 };

x.ExecuteScalar(commandText, commandType, parameters);

答案 2 :(得分:2)

DbParameter是一个抽象类 - 但您可以实例化派生类型。

如果您使用的是Sql server,则为SqlParameter:

 DbParameter[] parameters = new DbParameter[2]; 
 parameters[0]  = new SqlParameter("param1",  123456);
 parameters[1]  = new SqlParameter("param2",  "abcdef");

答案 3 :(得分:1)

params关键字意味着您可以指定不同数量的参数(从1到[几乎]无穷大)。

您可以像这样调用方法: ExecuteScalar<SomeType>("Command!", CommandType.SomeCommandType, dbParameter1, dbParameter2);

答案 4 :(得分:0)

在“完美世界”中,您应该通过以下代码创建任何单个参数:

DbProviderFactory f = DbProviderFactories.GetFactory("System.Data.SqlClient");
DbParameter parameter = f.CreateParameter();

但是您可能必须使用SqlParameter实现的某些特定平台功能...就像SqlCommand一样:SqlCommand.Parameters.AddWithValue()等。