2012-06-20 23 views
10

Uso Entity Framework 4.2 y quiero llamar a un procedimiento almacenado que tiene parámetros de entrada. Estoy usando Database.ExecuteSqlCommand para llamar al procedimiento almacenado.¿Cuál es la sintaxis correcta para usar Database.ExecuteSqlCommand con parámetros?

Sin embargo, la documentación carece de la sintaxis correcta para la llamada a fin de asignar los parámetros correctamente. Mi google-foo me está fallando, y cualquier ayuda será apreciada.

I.e. Tengo un procedimiento

procedure SetElementFrequency 
    @ElementTypeID integer, 
    @Frequency float 
as ... 

He intentado llamar con

Database.ExecuteSqlCommand("exec SetElementFrequency @p0 @p1", 
          elementType, frequency); 

y

Database.ExecuteSqlCommand("exec SetElementFrequency {0} {1}", 
          elementType, frequency); 

pero ambos producen el error sintaxis incorrecta cerca de '@ p1'.

+3

Si esto es Transact-SQL, le falta una coma entre los parámetros. :) – bricelam

+1

Por supuesto que lo es, y por supuesto que soy :) – SWeko

Respuesta

16

función del proveedor de base de datos subyacente, se puede utilizar cualquiera de las siguiendo.

Database.ExecuteSqlCommand(
    "exec SetElementFrequency {0}, {1}", 
    elementType, frequency); 

o

Database.ExecuteSqlCommand("exec SetElementFrequency ?, ?", elementType, frequency); 

También puede especificar elementType y frequency como DbParameter objetos basados ​​proporcionan a sus propios nombres a través de la propiedad ParameterName.

2

intentar algo como esto:

context.Database.ExecuteSqlCommand("delete MasterSmsCampaignCertificateInfo where  MasterSmsCampaignGuid = @p0 and CertificateId = @p1", 
TheCampaignGuid, 
certInfo.CertificateId); 

Tome un vistazo a esta pregunta similar: ExecuteSqlCommand with output parameter Saludos

+0

¿Significa esto que el primer parámetro está establecido en '@ p0', el segundo en' @ p1', y así sucesivamente? – SWeko

+0

Parece que ... – Oscar

+0

lo probé, no funciona – SWeko

2
var sql = @"Update [User] SET FirstName = {0} WHERE Id = {1}"; 
ctx.Database.ExecuteSqlCommand(sql, firstName, id); 
+0

Esta sintaxis funciona bien, el problema estaba en mi formato de consulta. – SWeko

+0

Esto es solo una copia de otra respuesta de una pregunta similar, sin ajustar el contexto. http://stackoverflow.com/a/5475210/642054 –

Cuestiones relacionadas