2011-03-03 28 views
7

¿Cómo puedo ejecutar un procedimiento almacenado que toma los parámetros sin tener que especificar el nombre de los parámetros? El nombre del parámetro en el procedimiento almacenado puede cambiar de CustomerID a CustID, por lo que no quiero tener que seguir cambiando mi código.C# Ejecute un procedimiento sin especificar un nombre de parámetro

En lugar de hacer lo que se proporciona a continuación, donde se especifica el nombre del parámetro -

command.Parameters.Add("@dtStart", SqlDbType.DateTime); 
command.Parameters["@dtStart"].Value = startDate; 
command.Parameters.Add("@CustomerID", SqlDbType.NChar); 
command.Parameters["@CustomerID"].Value = customerID; 

Estoy buscando para hacer algo como esto -

command.Parameters.Add(startDate, customerID); 
+3

Sólo por curiosidad, ¿el SP aún funciona si usted no establece el nombre de los parámetros? Si necesita modificar el valor después de la creación, puede hacer referencia a ellos por su índice: 0, 1, etc. Por supuesto, tendrá que cambiar su código si reordenaron los parámetros del SP. – jonathanpeppers

+0

Tuve una charla y decidieron no cambiar el nombre del parámetro, así que la manera tradicional me funciona en el momento. Al principio, estaba buscando una solución donde puedas usar un índice similar al que dijiste. – m0g

Respuesta

16

El nombre del parámetro en el procedimiento almacenado puede cambiar de CustomerID a CustID

la palmada de la persona que lo hace.

Los nombres de los parámetros son una manera confiable de identificar un parámetro. La otra opción es la secuencia, parece mucho más escamosa.

+3

+1 buena respuesta ... ¡¡¡SLAP !!! –

+0

¡De acuerdo! pero en algún momento de dicha aplicación obtenemos algún tipo de requisito en el que solo necesitamos enviar valores en secuencia del parámetro respectivo. y mientras trabajemos, tenemos que usar "exec" y escribir el nombre del procedimiento almacenado con parámetros en el texto de comando – Sutirth

+0

Viniendo de land of gandhi, recomendaré un enfoque no violento y sin violencia física. Haga una marcha de vela no violenta en su lugar. –

-2

Se puede usar de SQL exec, que no lo hace pregunte los nombres de los parámetros:

command.CommandText = string.Format(
    "exec dbo.YourProcedure {0}, '{1}'", 
    intParameter, 
    stringParameter.Replace("'","''") 
); 
command.ExecuteNonQuery(); 

Si su fuente del parámetro es unt inofensivo, asegúrese de evitar comillas simples en los parámetros de cadena. Está hecho para stringParameter en el fragmento de arriba.

5

No creo que se puede crear un objeto SqlParameter sin especificar su nombre. Sin embargo, debe poder utilizar el método DeriveParameters (see MSDN) para obtener una colección de parámetros con los nombres recuperados automáticamente del servidor SQL.

Puede encontrar un example here. Se ve más o menos así:

SqlCommand command = // create a command for calling the stored procedure 
SqlCommandBuilder.DeriveParameters(command); 

// Now you can set values of parameters in a loop 
for(int i = 0; i < command.Parameters.Length; i++) { 
    var parameter = command.Parameters[i] 
    // Set value of ith parameter 
} 
0

Puede crear un parámetro de SQL sin nombre, si se fuerza su nombre a un valor nulo o vacío después que ha sido añadido a la colección Parameters, algo como esto:

var par = cmd.CreateParameter(); 
par.Value = myValue; 
cmd.Parameters.Add(par); // this will change the name to "ParameterX" 
par.ParameterName = null; 
Cuestiones relacionadas