2011年12月21日 星期三

C#寫入SQL字串時, 須要注意的單引號的事

商業書信時常發現有一種寫法就是Ms.Wang's .

看起來很正常, 如果Ms.Wang's 出現在程式要將這個字串寫入SQL SERVER 時, 卻發現老是出錯,寫不進入.

經過檢查, 發現是因為  問題出現在單引號上, 這個單引號會造成SQL SERVER 在解析這些字串時出現錯誤, 因為SQL SERVER 本身就是利用單引號在解析字串, 結果字串內又含有單引號造成SQL SERVER 解析出錯.


例如:

String MyStr = " Hello, This is Ms.Wang's monther ";

String MySql = "Update MyTable set Message = '" + MyStr + "' ";

當我們執行這個 SQL script 時, 經由展開, 我們發現 MySql 的內容變成.

Update MyTable set Message  = ' Hello, This is Ms.Wang's monther '

有沒有發現 , 上面的這個SQL script 有三個單引號, 難怪 SQL SERVER 會出現錯誤.

這時改進的方法就是先將字串作檢查, 如果發現有使用到單引號, 就先作處理, 就是把一個單引號變成兩個, 這樣SQL SERVER 就知道, 這個是一個單引號, 而不是字串的結束符號.


String MySql = "Update MyTable set Message = '" + MyStr.Replace("'", "''") + "' ";

切記, 切記!!

沒有留言: