2013-03-26 51 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,你会不会担心这样的事情。你不必担心撇号和其他一些问题。