2013-08-08 12 views
7

Jak dodać parametr do następującego surowego polecenia SQL modułu Entity Framework? Na przykład, jeśli chcę ustawić parametr Id?Jak dodać parametr do struktury surowego komendy sql obiektu

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

     } 
+0

Wiem, że twoje pytanie dotyczy tworzenia parametrów (SqlParameter), jeśli z jakiegokolwiek powodu chcesz, ale, w twoim przypadku, jeśli chcesz wywołać surowe polecenie sql jak UPDATE, czemu nie użyć ciągu.Format ("UPDATE. .. WHERE Id = {0} ", typedIdVariable) zamiast SqlParameter? – natenho

+1

@natenho: ponieważ, bez względu na to, nie powinieneś ulec pokusie złożenia SQL przez połączenie ciągów. Chociaż prawdopodobnie będzie działać na podstawie zastępstw całkowitych (ten konkretny przypadek użytkownika), pozostawia dojrzałość do SQL injection w innych przypadkach. Zły nawyk, którego najlepiej unikać. – spender

+0

Co prowadzi mnie do innego pokrewnego pytania. Wiesz, jak wywołać context.usp_stored_proc (parm1, parm2)? Czy to podlega atakowi iniekcyjnemu? – Rod

Odpowiedz

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

w przypadku wielu parametrów

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

Jak możemy go wdrożyć dla wielu parametrów? – Silver

+0

@Silver Sprawdź moją zaktualizowaną odpowiedź – Damith

3

Poniższy kod powinien pracować dla tego scenariusza:

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

Można również użyć SqlParameter i używać @id:

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

W jaki sposób możemy go wdrożyć dla wielu parametrów? – Silver

Powiązane problemy