插入语句中的 OleDbException 语法错误

Posted

技术标签:

【中文标题】插入语句中的 OleDbException 语法错误【英文标题】:OleDbException syntax error in insert Statment 【发布时间】:2012-04-07 18:09:18 【问题描述】:
static string connStrCheckData = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath("test.xlsx") + ";Extended Properties=Excel 12.0;";
 
static string      oledbConnCheckData = new OleDbConnection(connStrCheckData);

string adsName ="MagMall.com - subscription savings on 1,000's of magazines";

OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "insert into  [sheet1$] ( [column1]) values ('" + adsName.ToString().Trim() + "')";
cmd.Connection = oledbConnCheckData;

oledbConnCheckData.Open();

cmd.ExecuteNonQuery();

oledbConnCheckData.Close();

Errro : 查询表达式中的语法错误(缺少运算符) ''MagMall.com - 订阅 1,000 种杂志可节省费用')'。

当我尝试插入:“MagMall.com - 1,000 份杂志的订阅节省”字样时出现上述错误。

【问题讨论】:

【参考方案1】:

正如 juergen 所说,您必须避开单个撇号,购买一个额外的撇号:1,000's(不是 \')。双撇号是传递语句的正确方法。

【讨论】:

【参考方案2】:

你必须像这样1,000\'s 转义1,000's 中的' 1,000\'s

【讨论】:

连字符“-”能否产生任何问题。并且 adsName 的值每次在循环中都会发生变化,那么我如何在变量中应用转义。 我确实喜欢 adsName.ToString().Trim().Replace("'", "\'") 但仍然报错。 @Shailesh:试试adsName.ToString().Trim().Replace("'", "\\'")

以上是关于插入语句中的 OleDbException 语法错误的主要内容,如果未能解决你的问题,请参考以下文章

C# - INSERT INTO 语句中的语法错误(System.Data.dll 中发生“System.Data.OleDb.OleDbException”类型的未处理异常)

带有更新查询的 OleDbCommand 导致 OleDbException

OleDbException:ORDER BY 子句中的语法错误

OleDbException 未处理:查询表达式中的语法错误(缺少运算符)

从 vb.net 将值插入 Access db

使用此 INSERT INTO 语句和 .NET OleDb 命名空间时如何解决语法错误?