2016-04-05 23 views
0

Bir SQL dizesinde çift tırnak işaretleri ile belirli bazı tek tırnak yerine koymak istiyorum, ancak bu dizede tüm single'lar tırnak işaretleri yerine. Yukarıdaki örnekte Belirli bir tek tırnak işareti ve çift tırnak işareti ile değiştirme C#

EXEC procedureName 'param'eter1', 'parameter2' 

ben sadece aynı kalması 'param'eter1' ama başlangıç ​​ve parametrenin sonunda single tırnak içindeki single tırnak değiştirmek istiyor.

Aşağıdaki komutu kullanarak dizedeki tüm single'ların tırnaklarını değiştirin ve bu doğru '' param''eter1 '' gibi görünüyor.

sometext.Replace("'", "''") 

bunun böyle bakmak istiyorum:

EXEC procedureName 'param''eter1', 'parameter2' 

Ayrıca ben SqlParameter kullanarak ancak SQL parametrelerinde tek tırnak işlemek için daha iyi bir çözüm olduğunu zaten farkındayım unutmayın kısıtlamalar nedeniyle proje ortamında bunu uygulayamıyorum.

Güncelleme:

tam deyimi oluşturmak için bunları kullanmadan önce bireysel parametrelerin değiştirilmesi O koduna erişim yok gibi benim için bir seçenek değildir. Projem, diğer uygulamaların işlenmesi için SQL dizeleri aldığı bir veri katmanı gibi çalışır.

+1

Beyaz boşluktan sonra değil, boşluk/virgülle eşleşmeyen 'regex ile eşleşen normal ifadeleri kullanabilirsiniz. Ama gerçekten ihtiyacınız olan şey, projenizin mimarisini değiştirmek (ya da en azından hizmetin ismini, insanların burada SqlInjection'a kurban gitmeyecek şekilde adlandırmasını sağlamaktır). – gdoron

+0

Tek tek parametrelerde, tüm ifadeyi oluştur. – NineBerry

cevap

0

gibi yapabilirsiniz. SQL sözdizimi, tek tırnak işaretinin tek bir alıntıyı temsil edip etmeyeceğini veya dize değişimini sona erdirmek anlamına gelip gelmediğini söyleyemediğinden tam anlamıyla tek tırnaklardan kaçmanızı gerektirir.

EXEC procedureName 'param ', ' eter1', 'parameter2' 

Nasıl bu üç prosedür çağrısı üzere parametreler veya sadece iki olması gerekiyordu olup olmadığını bilemez:

Aşağıdaki örneği inceleyelim? Ve bu özel prosedürün iki parametre aldığını biliyor olsanız bile, orta bölümün birinci veya ikinci parametreye ait olup olmadığına karar veremezdiniz. Sistem, tam deyim oluşturulmadan önce tek tırnak işaretleri ile uğraşmadan kullanıcı girdisinden sql ifadeleri oluşturuyorsa, bu sisteme bir sql injection aracılığıyla kolayca saldırmak için çok kolay şekilde kullanılabilir. Üste |

+0

Evet, haklısın, elde etmeye çalıştığım her zaman işe yaramayacak ve ayrıca sql enjeksiyon saldırılarına eğilimli olacak, bu yüzden fikri bırakabilirim. – Dineesh

-1

Eğer Bu çok kötü bir fikir bu

var aStringBuilder = new StringBuilder(theString); 
aStringBuilder.Remove(3, 2); // just find a position of single quotes 
aStringBuilder.Insert(3, "/""); // replace that position with " quotes using loop 
theString = aStringBuilder.ToString(); 
+0

Tek tırnakların konumu bilinmediği için bu benim için çalışmaz, herhangi bir yerde olabilir. – Dineesh

İlgili konular