【问题标题】:How to create array DbParameter[]如何创建数组 DbParameter[]
【发布时间】:2011-08-17 18:26:55
【问题描述】:

手册说 ExecuteScalar 方法应该像这样使用:

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

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

【问题讨论】:

标签: c# sql executescalar


【解决方案1】:

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

如果你使用的是 Sql server 它是 SqlParameter:

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

【讨论】:

  • 这是一个即时的“索引超出范围”异常......应该是parameters[1]
【解决方案2】:
  • DbParameter 是一个抽象类。
  • 由于无法从用法中推断出类型 T,因此您必须指定它。
  • 虽然您可以只传递可变数量的参数而不创建数组,但如果您动态创建可变数量的参数,那么数组就是您的朋友。

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

【讨论】:

  • 两个答案都很好,但我更喜欢这个。谢谢大家!
【解决方案3】:

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

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

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

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

x.ExecuteScalar(commandText, commandType, parameters);

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2010-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-23
        • 2010-10-13
        • 1970-01-01
        • 2011-02-02
        • 1970-01-01
        相关资源
        最近更新 更多