手册说 ExecuteScalar 方法应该像这样使用:
public T ExecuteScalar<T>(
string commandText,
CommandType commandType,
params DbParameter[] parameters
)
但是如何创建该参数数组?我需要提供我的存储过程 2 参数。
手册说 ExecuteScalar 方法应该像这样使用:
public T ExecuteScalar<T>(
string commandText,
CommandType commandType,
params DbParameter[] parameters
)
但是如何创建该参数数组?我需要提供我的存储过程 2 参数。
虽然您可以只传递可变数量的参数而不创建数组,但如果您动态创建可变数量的参数,那么数组是您的朋友。
var parameters = new[]{
new SqlParameter(){ ParameterName="foo", Value="hello" },
new SqlParameter(){ ParameterName="bar", Value="World" }
};
x.ExecuteScalar<int>(commandText, commandType, parameters);
parameters
参数有params
关键字。这意味着您不必显式创建数组,但可以将可变数量的参数传递给方法:
x.ExecuteScalar(commandText, commandType, parameter1, parameter2);
但是,如果需要,可以显式创建数组并将其传递给方法,如下所示:
DbParameter[] parameters = new DbParameter[] { parameter1, parameter2 };
x.ExecuteScalar(commandText, commandType, parameters);
DbParameter 是一个抽象类 - 但您可以实例化派生类型。
如果您使用的是 Sql 服务器,它是 SqlParameter:
DbParameter[] parameters = new DbParameter[2];
parameters[0] = new SqlParameter("param1", 123456);
parameters[1] = new SqlParameter("param2", "abcdef");
params 关键字意味着您可以指定不同数量的参数(从 1 到 [几乎] 无穷大)。
您可以像这样调用该方法:
ExecuteScalar<SomeType>("Command!", CommandType.SomeCommandType, dbParameter1, dbParameter2);
在“完美世界”中,您应该通过以下代码创建任何单个参数:
DbProviderFactory f = DbProviderFactories.GetFactory("System.Data.SqlClient");
DbParameter parameter = f.CreateParameter();
但您可能必须使用 SqlParameter 实现的一些特定平台功能......就像 SqlCommand 一样:SqlCommand.Parameters.AddWithValue() 等。