2010-04-02 65 views
1

我試圖運行從2005年ASP.NET這個SQL,但我得到一個無效的SQL錯誤,因爲它有它一個奇怪的字符我怎麼能代替」與「在一個MySQL查詢?

在我代碼我試圖取代"但它沒有這樣做在替換命令中的特殊字符更改爲"

查詢:

insert into userquery(description) 
    values ('In fact, Topeka Google Mayor Bill Bunten expressed it best: 「Don’t be fooled. Even Google recognizes that all roads lead to Kansas, not just yellow brick ones.」') 

如果我複製和在mysql中執行此它運作良好。

我該如何解決這個問題?

+0

請在標題中看到奇怪的字符。 – vamsivanka 2010-04-02 18:33:38

+3

您需要使用參數。 – SLaks 2010-04-02 18:37:42

+1

你能發佈確切的錯誤信息嗎? – Andomar 2010-04-02 18:40:48

回答

7

您建立您的查詢錯誤。你沒有說在客戶端上C#或vb.net,但無論哪種方式,您的SQL字符串應該看起來更像是這樣的:

string query = "insert into userquery(description) values (@description)"; 

然後設置你這樣的描述值:

using (var cn = new MySqlConnection("... your connection string here...")) 
using (var cmd = new MySqlCommand(query, cn)) 
{ 
    /* THIS IS THE IMPORTANT PART */ 
    cmd.Parameters.Add("@description", SqlDbType.VarChar).Value = MyDescriptionVariable; 
    /*****************************/ 

    cn.Open(); 
    cmd.ExecuteNonQuery(); 
} 

和VB中的版本:

Using cn As New MySqlConnection("... your connection string here..."), _ 
     cmd As New MySqlCommand(query, cn) 

    ''# THIS IS THE IMPORTANT PART 
    cmd.Parameters.Add("@description", SqlDbType.VarChar).Value = MyDescriptionVariable 
    ''############################ 

    cn.Open() 
    cmd.ExecuteNonQuery() 
End Using 

這將確保您的參數是正確轉義,不管你有什麼奇怪的字符。

-1

是雙引號的ASCII值是147

好醇」 VB6即時窗口:

?asc("「") 
147 

你可以做一個人權委員會取代(147),與逃脫雙引號: Chr(34)& Char(34)for「」。

+0

有沒有這樣的東西,ASCII字符147。 – 2010-04-02 18:52:40

+0

告訴VB6。它報告了147。 – HardCode 2010-04-05 20:43:11

0

實際的錯誤信息會有幫助。如果它是一個統一的問題,你可以嘗試:

插入一個N:

insert into userquery(description) 
    values (N'In fact, Topeka Google Mayor Bill Bunten expressed it best: 「Don’t be fooled. Even Google recognizes that all roads lead to Kansas, not just yellow brick ones.」') 

或者看到:replace MSWord smart quotes in asp.net webform

mystring.Replace("\u201C","\"").Replace("\u201D","\"") 
4

你應該寫這樣的查詢,使用文本前N:

insert into userquery(description) values (N'In fact, Topeka Google Mayor Bill Bunten expressed it best: 「Don’t be fooled. Even Google recognizes that all roads lead to Kansas, not just yellow brick ones.」') 

,並確保該字段爲nvarchar的ÔNTEXT(後者已被棄用,取而代之的爲nvarchar(最大)順便說一句的。) 。

無論如何,你應該遵循Joel Coehoorn建議使用參數化查詢來避免這些類型的問題和許多其他問題(比如SQL注入),因爲作爲參數抽取到數據庫中的字符串在到達數據庫之前已經過清理和轉義。