手册说应该使用ExecuteScalar方法,如:
public T ExecuteScalar<T>(
string commandText,
CommandType commandType,
params DbParameter[] parameters
)
但是如何创建参数数组呢?我需要提供我的存储过程2个参数。
答案 0 :(得分:8)
虽然你可以在不创建数组的情况下传递可变数量的参数,但如果你动态创建可变数量的参数,那么数组就是你的朋友。
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()等。