1. 程式人生 > >[SqlServer]如何向資料庫插入帶有單引號(')的字串

[SqlServer]如何向資料庫插入帶有單引號(')的字串

今天在做一個複製功能的時候,發現存在單引號字串與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物件雖然是引用型別,但它具有很多值型別特徵,比較特殊。