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
Te invitamos a favorecer nuestra faena escribiendo un comentario o dejando una valoración te lo agradecemos.