2013-08-08 8 views
7

Come aggiungerei un parametro al seguente comando SQL grezzo di Entity Framework? Ad esempio, cosa succede se volessi rendere il parametro Id un parametro?Come aggiungere un parametro al comando sql raw di entity framework

 using (var context = new NorthwindDBEntities()) 
     { 
      context.Database.ExecuteSqlCommand(@" 
       UPDATE dbo.Customers 
       SET Name = 'Test' WHERE Id = 1 
      "); 

     } 
+0

So che la tua domanda riguarda la creazione di parametri (SqlParameter) se vuoi qualunque ragione, ma, nel tuo caso, se vuoi chiamare un comando raw sql come un UPDATE, perché non usare un string.Format ("UPDATE. .. WHERE Id = {0} ", typedIdVariable) invece di un SqlParameter? – natenho

+1

@natenho: perché, non importa cosa, non si dovrebbe essere tentati di assemblare SQL tramite concatenazione di stringhe. Mentre probabilmente funzionerà per le sostituzioni di interi (caso specifico di questo utente), ti lascerà maturo per l'iniezione SQL in altri casi. Una cattiva abitudine meglio evitare. – spender

+0

Che mi porta ad un'altra domanda correlata. Sai come chiamare contest.usp_stored_proc (parm1, parm2)? È soggetto a un attacco di iniezione? – Rod

risposta

19
context.Database.ExecuteSqlCommand(@"UPDATE dbo.Customers 
      SET Name = 'Test' WHERE Id = @Id", new SqlParameter("Id", 1)); 

in caso di più parametri

context.Database.ExecuteSqlCommand(@"UPDATE dbo.Customers 
      SET Name = 'Test' WHERE Id = @id and Name [email protected]", 
       new SqlParameter("Id", id), 
       new SqlParameter("name", fname)); 
+0

Come possiamo implementarlo per più parametri? – Silver

+0

@Silver controlla la mia risposta aggiornata – Damith

3

Il seguente codice dovrebbe funzionare per questo scenario:

using (var context = new NorthwindDBEntities()) 
    { 
     context.Database.ExecuteSqlCommand(@" 
      UPDATE dbo.Customers 
      SET Name = 'Test' WHERE Id = {0} 
     ", 1); 
    } 

È anche possibile utilizzare SqlParameter e utilizzare @id:

using (var context = new NorthwindDBEntities()) 
    { 
     context.Database.ExecuteSqlCommand(@" 
      UPDATE dbo.Customers 
      SET Name = 'Test' WHERE Id = @id 
     ", new SqlParameter("id", 1)); 
    } 
+0

Come possiamo implementarlo per più parametri? – Silver

Problemi correlati