Saltar al contenido

Entity Framework que llama al procedimiento almacenado espera un parámetro que no se proporcionó

Recuerda que en las ciencias cualquier problema puede tener diversas soluciones, de igual modo enseñaremos lo más óptimo y mejor.

Solución:

Probablemente también debería quejarse del parámetro @user si este es el caso, pero de todos modos, intente proporcionar el parámetro sin el @ prefix:

NextSuperGroup supergroup = entities.Database.SqlQuery(
    "super_group @user, @orderbyUnique",
    new SqlParameter("user", userName),
    new SqlParameter("orderbyUnique", true)
).First();

El problema es que el SQL que EF está produciendo para valores NULL no debe ser compatible con nuestro Sql Server real. Estoy usando EntityFramework 6, pero no creo que la implementación haya cambiado desde 4.3.

Cuando encendí el rastreo, obtengo el siguiente resultado después de ejecutar un código similar al tuyo anterior:

exec sp_executesql N'super_group',N'@userName nvarchar(4000)',@userName=default

El problema radica en el valor “predeterminado” que se pasa en lugar de “NULL” y el error que vemos proviene del servidor SQL. Si desea una solución rápida y no necesita parámetros con nombre, puede usar esto:

NextSuperGroup supergroup = entities.Database.SqlQuery(
   "super_group",
    userName).First();

Que produce algo como esto y funciona muy bien:

exec sp_executesql N'super_group',N'@p0 nvarchar(4000)',@p0=NULL

Para los parámetros con nombre, debe usar el parámetro sql y establecer el valor o la propiedad SqlValue explícitamente en DBNull.Value (loco, lo sé). Algo como esto:

var parameter = new SqlParameter("userName", SqlDbType.VarChar);
parameter.SqlValue = username.SqlNullIfEmpty(); // Implemented with an extension method

Espero que ayude.

Problema de parámetro no pasado cuando se han pasado varios parámetros

Me faltaba ‘ESPACIO’ después de la ‘COMA’ del primer parámetro

var parameter = new List();
var param = new SqlParameter("@CategoryID", CategoryID);
parameter.Add(param);
param = new SqlParameter("@SubCategoryID", SubCategoryID);
parameter.Add(param);

List QueryResult = db.Database.SqlQuery("EXEC SP_GetProducts @CategoryID, @SubCategoryID ", parameter.ToArray()).ToList();

Te invitamos a favorecer nuestra faena escribiendo un comentario o dejando una valoración te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Respuestas a preguntas comunes sobre programacion y tecnología