Tengo un procedimiento almacenado que tiene tres parámetros y he estado tratando de usar lo siguiente para devolver los resultados:
context.Database.SqlQuery<myEntityType>("mySpName", param1, param2, param3);
Al principio intenté usar SqlParameter
objetos como parámetros, pero esto no funcionó y arrojé un SqlException
mensaje con el siguiente mensaje:
El procedimiento o la función 'mySpName' espera el parámetro '@ param1', que no se proporcionó.
Entonces, mi pregunta es ¿cómo puede usar este método con un procedimiento almacenado que espera parámetros?
Gracias.
c#
sql
ado.net
linq-to-entities
entity-framework-ctp5
oveja electrica
fuente
fuente
Respuestas:
Debe proporcionar las instancias de SqlParameter de la siguiente manera:
fuente
DbNull.Value
lugar de nulos resuelve el problema?Además, puede usar el parámetro "sql" como un especificador de formato:
fuente
ProcName @optionalParam1 = @opVal1, @optionalParam2 = @opVal2
Ejemplo que sí funciona:ProcName @optionalParam1 = {0}, @optionalParam2 = {1}
Esta solución es (solo) para SQL Server 2005
Ustedes son salvavidas, pero como dijo @Dan Mork, deben agregar EXEC a la mezcla. Lo que me estaba tropezando fue:
:
fuente
exec
, pero puedo confirmar que recibo una excepción si la omito.exec
palabra clave. +1 por la eliminación de la @ en los parámetros, eso siempre me confunde.//O
//O
//O
fuente
La mayoría de las respuestas son frágiles porque dependen del orden de los parámetros del SP. Es mejor nombrar los parámetros del proceso almacenado y darles valores parametrizados.
Para utilizar parámetros con nombre al llamar a su SP, sin preocuparse por el orden de los parámetros
Uso de parámetros con nombre de SQL Server con ExecuteStoreQuery y ExecuteStoreCommand
Describe el mejor enfoque. Mejor que la respuesta de Dan Mork aquí.
P.ej:
fuente
sqlParams
variableo
o
o
fuente
Yo uso este método:
Me gusta porque solo dejo caer Guids and Datetimes y SqlQuery realiza todo el formateo por mí.
fuente
La respuesta de @Tom Halladay es correcta con la mención de que también debe verificar los valores nulos y enviar DbNullable si los parámetros son nulos, ya que obtendría una excepción como
La consulta parametrizada '...' espera el parámetro '@parameterName', que no se proporcionó.
Algo como esto me ayudó
(el crédito para el método va a https://stackoverflow.com/users/284240/tim-schmelter )
Luego úsalo como:
u otra solución, más simple, pero no genérica sería:
fuente
Recibí el mismo mensaje de error cuando estaba trabajando con una llamada a un procedimiento almacenado que toma dos parámetros de entrada y devuelve 3 valores usando la instrucción SELECT y resolví el problema como se muestra a continuación en EF Code First Approach
ACTUALIZACIÓN : Parece que con SQL SERVER 2005 falta la palabra clave EXEC está creando un problema. Entonces, para permitir que funcione con todas las versiones de SQL SERVER, actualicé mi respuesta y agregué EXEC en la siguiente línea
fuente
Hice el mío con EF 6.x así:
No duplique en el parámetro sql algunas personas se queman al hacer esto en su variable
fuente