2011-08-17 16 views
5

Il manuale dice che il metodo ExecuteScalar dovrebbe essere usato come:Come creare un array DbParameter []

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

Ma come faccio a creare l'array di parametri? Devo fornire i miei parametri memorizzati della procedura 2.

+0

Potete fornire un collegamento a quel manuale? [DbCommand.ExecuteScalar] (http://msdn.microsoft.com/en-us/library/system.data.common.dbcommand.executescalar.aspx) non ha parametri. – dtb

risposta

8
  • DbParameter è una classe astratta.
  • Poiché il tipo T non può essere dedotto dall'utilizzo, è necessario specificarlo.
  • Sebbene sia possibile passare un numero variabile di parametri senza creare l'array, se si crea dinamicamente un numero variabile di parametri, l'array è tuo amico.

    var parameters = new[]{ 
          new SqlParameter(){ ParameterName="foo", Value="hello" }, 
          new SqlParameter(){ ParameterName="bar", Value="World" } 
         }; 
    x.ExecuteScalar<int>(commandText, commandType, parameters); 
    
+0

entrambe le risposte funzionano bene, ma preferisco questo un po 'più dell'altro. Grazie a tutti! – Tys

1

La parola chiave params indica che è possibile specificare un numero variabile di parametri (quindi da 1 a [praticamente] infinito).

si può chiamare il metodo come questo: ExecuteScalar<SomeType>("Command!", CommandType.SomeCommandType, dbParameter1, dbParameter2);

4

Il parametro parameters ha la params keyword. Questo significa che non c'è bisogno di creare l'array in modo esplicito, ma possibile passare un numero variabile di argomenti al metodo:

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

Tuttavia, se si desidera, è possibile creare l'array esplicitamente e passarlo al metodo come segue:

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

x.ExecuteScalar(commandText, commandType, parameters); 
2

DbParameter è una classe astratta - ma è possibile creare un'istanza del tipo derivato.

Se si utilizza il server Sql si è SqlParameter:

DbParameter[] parameters = new DbParameter[2]; 
parameters[0] = new SqlParameter("param1", 123456); 
parameters[1] = new SqlParameter("param2", "abcdef"); 
+0

Questa è un'eccezione "indice fuori intervallo" ... dovrebbe essere "parametri [1]" – Nyerguds

Problemi correlati