向SQLServer插入單引號問題

ywxj_001發表於2020-12-03

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物件雖然是引用型別,但它具有很多值型別特徵,比較特殊。


原創:https://blog.csdn.net/david_520042/article/details/11472283

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22996654/viewspace-2739148/,如需轉載,請註明出處,否則將追究法律責任。

相關文章