Reputation: 3610
The manual says that the ExecuteScalar method should be used like:
public T ExecuteScalar<T>(
string commandText,
CommandType commandType,
params DbParameter[] parameters
)
But how do I create that array of parameters? I need to provide my stored procedure 2 parameters.
Upvotes: 6
Views: 19811
Reputation: 147
In a "perfect world" you should create any single parameter by this code:
DbProviderFactory f = DbProviderFactories.GetFactory("System.Data.SqlClient");
DbParameter parameter = f.CreateParameter();
but you probably have to use some specific platform functionality that SqlParameter implements... as SqlCommand does: SqlCommand.Parameters.AddWithValue() etc.
Upvotes: 0
Reputation: 6882
DbParameter is an abstract class - but you can instantiate the derived type.
If you are using Sql server it is SqlParameter:
DbParameter[] parameters = new DbParameter[2];
parameters[0] = new SqlParameter("param1", 123456);
parameters[1] = new SqlParameter("param2", "abcdef");
Upvotes: 3
Reputation: 3518
Althought you can just pass a variable number of parameters without creating the array, if you are dynamically creating a variable number of parameters, the array is your friend.
var parameters = new[]{
new SqlParameter(){ ParameterName="foo", Value="hello" },
new SqlParameter(){ ParameterName="bar", Value="World" }
};
x.ExecuteScalar<int>(commandText, commandType, parameters);
Upvotes: 9
Reputation: 217233
The parameters
parameter has the params
keyword. This means that you don't have to create the array explicitly but can pass a variable number of arguments to the method:
x.ExecuteScalar(commandText, commandType, parameter1, parameter2);
However, if you want, you can create the array explictly and pass it to the method as follows:
DbParameter[] parameters = new DbParameter[] { parameter1, parameter2 };
x.ExecuteScalar(commandText, commandType, parameters);
Upvotes: 4
Reputation: 3117
The params keyword means that you can specify a varying number of parameters (so from 1 to [pretty much] infinity).
You can just call the method like this:
ExecuteScalar<SomeType>("Command!", CommandType.SomeCommandType, dbParameter1, dbParameter2);
Upvotes: 1