2012-06-20 10 views
10

Uso Entity Framework 4.2 e desidero chiamare una procedura memorizzata con parametri di input. Sto usando Database.ExecuteSqlCommand per chiamare la stored procedure.Qual è la sintassi corretta per l'utilizzo di Database.ExecuteSqlCommand con i parametri?

Tuttavia, nella documentazione manca la sintassi corretta per la chiamata per mappare correttamente i parametri. Il mio google-foo mi sta fallendo e ogni aiuto sarà apprezzato.

I.e. Ho un procedimento

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

ho provato a chiamare con

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

e

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

ma entrambi falliscono con l'errore di sintassi non corretta in prossimità '@ p1'.

+3

Se si tratta di Transact-SQL, manca una virgola tra i parametri. :) – bricelam

+1

Certo che lo è, e ovviamente lo sono :) – SWeko

risposta

16

seconda del provider di database sottostante, è possibile utilizzare una delle opzioni a seguire.

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

o

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

Si può anche specificare elementType e frequency come DbParameter oggetti basati per fornire i propri nomi tramite la proprietà ParameterName.

2

provare qualcosa di simile:

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

Date un'occhiata a questa domanda simile: ExecuteSqlCommand with output parameter migliori saluti

+0

Quindi questo significa che il primo parametro è impostato a '@ p0', il secondo a' @ p1', e così via? – SWeko

+0

Sembra che ... – Oscar

+0

provato, non funziona – SWeko

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

Questa sintassi funziona bene, il problema era con il mio formato di query. – SWeko

+0

Questa è solo una copia di un'altra risposta da una domanda simile, senza adattamento per il contesto. http://stackoverflow.com/a/5475210/642054 –

Problemi correlati