2013-03-26 69 views
2

我試圖找到一種方法來保護查詢字符串中的apostrophie。我有字符串格式包含apostrophie的值,它扔我一個錯誤,當我試圖插入C#OLEDB在查詢中保護對手

例如:

Insert into ["excelApp.worksheetsList.ElementAt(0).Name "$"] " + ([col1], [col2]) 
values values" + " ('" + val1 + "', '" + val2 + "');") 

這是個例。這裏val1包含「hereIsMy'value」。

謝謝你幫我

回答

3

您應該使用參數化查詢,你不必在查詢

using(OleDbConnection cn = new OleDbConnection(GetConnectionString())) 
{ 
    cn.Open(); 
    string cmdText = "Insert into [" + excelApp.worksheetsList.ElementAt(0).Name + "$] " + 
        "([col1], [col2]) values (?, ?)"; 
    OleDbCommand cmd = new OleDbCommand(cmdText, cn) 
    cmd.Parameters.AddWithValue("@p1", val1); 
    cmd.Parameters.AddWithValue("@p2", val2); 
    cmd.ExecuteNonQuery(); 
} 

擔心單引號在這個例子中命令文本由單一字符串的佔位符參數值。然後命令對象被聲明爲具有該字符串,並且在它的參數集合處添加兩個參數。它們根據作爲值傳遞的變量類型創建。所以,如果val1和val2是字符串並且存在單引號(撇號),它將自動格式化爲插入/刪除/更新或選擇操作請求

+0

+1 Nice代碼片段和解釋。 – 2013-03-26 14:17:50

+0

謝謝,就是這樣。 – Sebastien 2013-03-26 14:37:45

1

使用parameterized commands,你會不會擔心這樣的事情。你不必擔心撇號和其他一些問題。