[SqlServer]如何向資料庫插入帶有單引號(')的字串
阿新 • • 發佈:2019-02-13
今天在做一個複製功能的時候,發現存在單引號字串與INSERT INTO 語句的' '產生衝突。
在網路上找到了一個這樣功能
如何向資料庫插入帶有單引號(')的字串 用SQL語句往資料庫某欄位(字元型)中插入字串,但是當該字串中帶有單引號(')時就會出錯!因為插入的字串被從單引號處截斷,造成SQL語句的語法錯誤! 我們在程式設計當中,經常會遇到在操作資料庫時,向表裡插入帶有單引號的字串。如果不作處理程式會報錯,下面看看我們是怎麼的處理它的。 用SQL語句往資料庫某欄位(字元型)中插入字串,但是當該字串中帶有單引號(')時就會出錯!因為插入的字串被從單引號處截斷,造成SQL語句的語法錯誤! 解決方法:遍歷字串,把一個(')換成兩個(' ')就可以了,在C#裡,其實用str.Replace("'", "''");就OK了,這是因為SQL是用兩個單引號來代替一個單引號的,下面舉個例子: private void btAdd_Click(object sender, EventArgs e) { string chinese = this.txtChinese.Text.Trim(); string english = this.txtEnglish.Text.Trim(); if (chinese == "") { MessageBox.Show("請輸入中文!"); } else if (english == "") { MessageBox.Show("請輸入英文!"); } else { oleConnection1.Open(); string sql = "Select * From info Where chinese='" + CheckString(chinese) + "' And english='" + CheckString(english) + "'"; this.oleCommand1.CommandText = sql; if (null == oleCommand1.ExecuteScalar()) { string sql1 = "Insert Into info(chinese,english) Values('" + CheckString(chinese) + "','" + CheckString(english) + "')"; oleCommand1.CommandText = sql1; oleCommand1.ExecuteNonQuery(); MessageBox.Show("資訊新增成功!", "提示"); this.txtChinese.Text = ""; this.txtEnglish.Text = ""; } else { MessageBox.Show("資訊新增失敗,中文和英文已經存在了!", "警告"); this.txtChinese.Text = ""; this.txtEnglish.Text = ""; } oleConnection1.Close(); } } private string CheckString(string str) { string returnStr = ""; if (str.IndexOf("'") != -1) //判斷字串是否含有單引號 { returnStr = str.Replace("'", "''"); str = returnStr; } return str; } 這裡為什麼要用另一個變數(returnStr)來接收替換後的值呢?不然替換會失效,呼叫Replace()方法不能改變str本身,string物件雖然是引用型別,但它具有很多值型別特徵,比較特殊。