2012-10-17 17 views
6

Dize tabanlı parametre enjeksiyonu yerine adlandırılmış parametreler kullanmanın büyük bir hayranıyım. Çoğu SQL enjeksiyon biçimine karşı güvenli ve güvenlidir. Eski ADO.NET'te, SqlCommand nesnesini ve sorgum için bir grup SqlParametre oluşturacağım.DbSet <T> .SqlQuery() kullanırken, adlandırılmış parametreler nasıl kullanılır?

var sSQL = "select * from Users where Name = @Name"; 
var cmd = new SqlCommand(conn, sSQL); 
cmd.Parameters.AddWithValue("@Name", "Bob"); 
cmd.ExecuteReader(); 

Şimdi, Entity Framework, (bu bağlantıyı) belirir tekrar String.Format beyanı ve dize enjeksiyon basit gerilediği adres: (tartışma için basitleştirilmiş)

MyRepository.Users.SqlQuery("Select * from Users where Name = {0}", "Bob"); 

orada mı Entity Framework DbSqlQuery sınıfı ile adlandırılmış parametreleri kullanma yolu? Bir ObjectParameter başlatmasını adına iki nokta üst üste koymak gerekmez

var param = new ObjectParameter("p0", "Bob"); 
MyRepository.Users.SqlQuery("Select * from Users where Name = :p0", param); 

: Ben yorum yapamam yana

cevap

4
var param = new ObjectParameter(":p0", "Bob"); 
MyRepository.Users.SqlQuery("Select * from Users where Name = :p0", param); 
+0

Bu belge nerede? Ve SQL Body'da hangi isim formatlarına izin verilir? @name stilini desteklemiyor mu? –

+0

@EricFalsken. [Burada MSDN'de] görebilirsiniz (http://msdn.microsoft.com/en-us/library/system.data.objects.objectparameter.aspx), ** bu \ @name stili desteklenmektedir **. – gdoron

+0

Mükemmel! Çok teşekkürler! –

2

, başka bir cevap tamir ediyorum. Bu yüzden SLC yorumunda bahsettiği hatayı aldi.

İlgili konular