6

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.

1
  • Can you provide a link to that manual? DbCommand.ExecuteScalar has no parameters. Commented Aug 17, 2011 at 18:38

5 Answers 5

9
  • DbParameter is an abstract class.
  • Since the type T can not be inferred from the usage, you have to specify it.
  • 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);
    
Sign up to request clarification or add additional context in comments.

1 Comment

both answers work fine, but i prefer this one a bit more that the other. Thanks everyone!
4

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);

Comments

3

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");

1 Comment

That's an instant "index out of range" exception... should be parameters[1]
1

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);

Comments

0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.