Supongamos que tengo una necesidad válida de ejecutar directamente un comando sql en Entity Framework. Tengo problemas para descubrir cómo usar los parámetros en mi declaración sql. El siguiente ejemplo (no es mi ejemplo real) no funciona.
var firstName = "John";
var id = 12;
var sql = @"Update [User] SET FirstName = @FirstName WHERE Id = @Id";
ctx.Database.ExecuteSqlCommand(sql, firstName, id);
El método ExecuteSqlCommand no le permite pasar parámetros con nombre como en ADO.Net y la documentación de este método no da ningún ejemplo sobre cómo ejecutar una consulta parametrizada.
¿Cómo especifico los parámetros correctamente?
entity-framework
entity-framework-4.1
jessegavin
fuente
fuente
Resulta que esto funciona.
fuente
SqlParameter("@paramName", value)
lugar.Tu también puedes:
1) Pase argumentos en bruto y use la sintaxis {0}. P.ej:
2) Pase los argumentos de la subclase DbParameter y use la sintaxis @ParamName.
Si usa la primera sintaxis, EF en realidad envolverá sus argumentos con clases DbParamater, les asignará nombres y reemplazará {0} con el nombre del parámetro generado.
La primera sintaxis se prefiere porque no necesita usar una fábrica o saber qué tipo de DbParamaters crear (SqlParameter, OracleParamter, etc.).
fuente
Las otras respuestas no funcionan cuando se usa Oracle. Necesitas usar en
:
lugar de@
.fuente
Prueba esto (editado):
La idea anterior estaba mal.
fuente
Para la entidad Framework Core 2.0 o superior, la forma correcta de hacer esto es:
Tenga en cuenta que Entity Framework producirá los dos parámetros para usted, por lo que está protegido de la inyección SQL.
También tenga en cuenta que NO es:
porque esto NO lo protege de la inyección SQL y no se producen parámetros.
Mira esto para más.
fuente
ctx.Database.ExecuteSqlCommand("Update [User] SET FirstName = {firstName} WHERE Id = {id}", firstName, id);
FormattableString
. Tienes razón y eso es genial!Versión simplificada para Oracle. Si no quieres crear OracleParameter
fuente
¡Esto es muy simple!
Imagen para conocer la referencia del parámetro
fuente
Para el Método asíncrono ("ExecuteSqlCommandAsync") puede usarlo así:
fuente
Si los tipos de datos de la base de datos subyacentes son varchar, entonces debe seguir con el siguiente enfoque. De lo contrario, la consulta tendría un gran impacto en el rendimiento.
Puede consultar el perfilador SQL para ver la diferencia.
fuente
Uso:
fuente
ExecuteSqlCommand()
Usted debe asegurarse de responder la pregunta específica que se le hace al publicar respuestas.Parámetros múltiples en un procedimiento almacenado que tiene múltiples parámetros en vb:
fuente
Los procedimientos almacenados se pueden ejecutar como a continuación
fuente
Para .NET Core 2.2, puede usarlo
FormattableString
para SQL dinámico.fuente