2011-08-17 19 views
5

El manual dice que el método ExecuteScalar se debe utilizar como:Cómo Crear una matriz de DbParameter []

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

Pero ¿cómo creo que la matriz de parámetros? Necesito proporcionar los parámetros de mi procedimiento almacenado 2.

+0

¿Puede proporcionar un enlace a ese manual? [DbCommand.ExecuteScalar] (http://msdn.microsoft.com/en-us/library/system.data.common.dbcommand.executescalar.aspx) no tiene parámetros. – dtb

Respuesta

8
  • DbParameter es una clase abstracta.
  • Como el tipo T no se puede inferir del uso, debe especificarlo.
  • Aunque puede pasar una cantidad variable de parámetros sin crear la matriz, si está creando dinámicamente un número variable de parámetros, la matriz es su amiga.

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

ambas respuestas funcionan bien, pero prefiero esta una más que la otra. ¡Gracias a todos! – Tys

1

La palabra clave params significa que puede especificar un número variable de parámetros (por lo tanto, de 1 a [prácticamente] infinito).

Sólo puede llamar al método como este: ExecuteScalar<SomeType>("Command!", CommandType.SomeCommandType, dbParameter1, dbParameter2);

4

El parámetro parameters tiene la params keyword. Esto significa que usted no tiene que crear la matriz explícitamente, pero puede pasar un número variable de argumentos para el método:

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

Sin embargo, si se quiere, se puede crear la matriz explicitamente y pasarlo al método de la siguiente manera:

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

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

DbParameter es una clase abstracta - pero se puede crear una instancia del tipo derivado.

Si está utilizando el servidor SQL es SqlParameter:

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

Esa es una excepción instantánea de "índice fuera de rango" ... debería ser 'parameters [1]' – Nyerguds

Cuestiones relacionadas