6

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

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

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

4

5 回答 5

9
  • DbParameter 是一个抽象类。
  • 由于无法从用法中推断出类型 T,因此您必须指定它。
  • 虽然您可以只传递可变数量的参数而不创建数组,但如果您动态创建可变数量的参数,那么数组是您的朋友。

    var parameters = new[]{
                new SqlParameter(){ ParameterName="foo", Value="hello" },
                new SqlParameter(){ ParameterName="bar", Value="World" }
            };
    x.ExecuteScalar<int>(commandText, commandType, parameters);
    
于 2011-08-17T18:32:13.197 回答
4

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

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

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

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

x.ExecuteScalar(commandText, commandType, parameters);
于 2011-08-17T18:30:34.927 回答
3

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

如果您使用的是 Sql 服务器,它是 SqlParameter:

 DbParameter[] parameters = new DbParameter[2]; 
 parameters[0]  = new SqlParameter("param1",  123456);
 parameters[1]  = new SqlParameter("param2",  "abcdef");
于 2011-08-17T18:39:14.573 回答
1

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

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

于 2011-08-17T18:30:22.930 回答
0

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

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

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

于 2019-09-25T16:31:58.867 回答