2014-06-20 26 views
5

Google'da arama yaptım ve henüz sorunum için herhangi bir çözüm bulamadım. Temel olarak bir resim galerisinde kurulum yapan bir yorum feed'im var (facebook veya stackoverflow yorumlarına benzer). Kullanıcılar yorum gönderebilir ve diğer kullanıcılar tarafından gönderilen yorumları okuyabilir. Bu iyi çalışıyor.SQL INSERT INTO ile özel karakterler kaçış yoluyla C#

Incorrect syntax near 's'. Unclosed quotation mark after the character string ')'.

Ben SQL post ediyorum comment 81 en geçerli: Bir kullanıcı kesme işareti Yorum yazmak için çalışırsa Ancak, ben güzel bir web uygulaması hatası alıyorum.tüm özel karakterlerden kaçacak bir çözüm istiyorum, böylece kullanıcı ne yazıyorsa yazsın, hata yapmaz.

Fetcher.postUserComments(connectionString, imagePath, comments.ToString(), userId); 

Alıcısı

sqlCom.CommandText = "INSERT INTO dbo.Table(userId, imagePath, userComments, dateCommented) VALUES ('" + userId + "', '" + imagePath + "', '" + comments + "', '" + theDate + "')"; 

veri türü dizedir ve de bir .ToString() ama hiçbir şans yapıyor denedim arkasında

Kodu. Herhangi bir faydalı giriş için şimdiden teşekkür ederiz.

+1

önlemek için ... şey gibi bir yorumun içinden kötü niyetli sql sorguları enjekte edebilir! Kendinizi [SQL Injection saldırıları] 'na açıyorsunuz (http://msdn.microsoft.com/en-us/library/ff648339.aspx). Tüm sorgularınızı parametrelemek için kodunuzu değiştirin. Aksi halde üzüleceksin. –

cevap

7

Hep parametreli querys kullanmalıdır. Onlar size yaşıyorsanız gibi durumlardan kaçınmak, hem de SQL Injection attacks

sqlCom.CommandText = "INSERT INTO dbo.Table(userId, imagePath, userComments, dateCommented) VALUES (@userId, @imagePath, @userComments, @dateCommented)"; 

sqlCom.Parameters.AddWithValue("@userId", userId); 
sqlCom.Parameters.AddWithValue("@imagePath", imagePath); 
sqlCom.Parameters.AddWithValue("@userComments", comments); 
sqlCom.Parameters.AddWithValue("@dateCommented", theDate); 
+0

Bilgi ve düzeltmeler için teşekkür ederiz. Her şey şimdi iyi çalışıyor. –

3

Açıklamalarla Alternatif

comments = comments.Replace("'", "''"); 

yılında 'karakterini çoğaltmak gerekir, ancak fazla güvenlik, örnek, SQL parametresini kullanmaktır:

cmd.CommandText = "SELECT * FROM Client, Project WHERE Client.ClientName = @ClientName AND Project.ProjectName = @ProjectName"; 

cmd.Parameters.Add(new SqlParameter("@ClientName",client.SelectedValue)); 

cmd.Parameters.Add(new SqlParameter("@ProjectName",projnametxt.Text)); 
+0

Bu bir bant yardımcısı düzeltmesi olurdu. O zaman tüm özel karakterler için bunu yapmak zorundayım. Daha kalıcı bir çözüm arıyorum. Yine de tavsiye için teşekkür ederim. Soruyu "tüm özel karakterler" olarak bildirmem gerekiyor. –

+0

*** *** gibi özel karakterler var. Belki de kaçarız. – Kiquenet

3

Bunu ASLA ... kolay SQL enjeksiyonuna olanak tanır çünkü yardımcı olur. Ben

;drop database master; 

kullanım parametreleri yerine bunu yapma SQL enjeksiyon

command.Parameters.Add(new SqlParameter("@Param", value));