查询表达式中的语法错误(缺少运算符)""

时间:2015-09-03 07:13:47

标签: c# mysql excel interop delete-row

我在删除(删除)行时遇到问题。每次我在string sql中添加列名时,它会在查询表达式"中显示错误"语法错误(缺少运算符)。这是我的代码:

OleDbConnection myCon = new OleDbConnection("provider = Microsoft.Jet.OLEDB.4.0;DataSource = '" + fileLocation + "'; Extended Properties=Excel 8.0;");
OleDbCommand myCmd = new OleDbCommand();

myCmd.Connection = myCon;

string sql = "DELETE * FROM [" + tablename + "$] where _date = '" + full_date + "'";

myCmd.CommandText = sql;
myCon.Open();

myCmd.ExecuteNonQuery();

myCon.Close();

例如,我的string sql值为

"DELETE * FROM [Sheet1$] where _date = '03 09 2015'"

会产生此错误:

  

查询表达式中的语法错误(缺少运算符)" _date =' 03 09   2015'"

在我的excel文件中插入数据时没有问题,但是在删除它时就说错了。

3 个答案:

答案 0 :(得分:2)

尝试使用此功能,即删除*DELETE语句不需要它:

string sql = "DELETE FROM [" + tablename + "$] where _date = '" + full_date + "'";

您在full_date中获得的值似乎也没有正确的格式。请使用您在表格中的格式检查full_date中获得的值。

旁注:

您的代码很容易出现SQL注入。您需要使用预准备语句来避免这种情况。

答案 1 :(得分:1)

您的查询中存在语法错误,请从查询中删除*,因此您的查询可能如下所示:您可以检查语法here:

 string sql = "DELETE FROM [" + tablename + "$] where _date = '" + full_date + "'";

您正在使用的查询将为sql injection开辟一条广阔的道路,因此更好的方法是使用参数化查询。

答案 2 :(得分:0)

你应该试试

 string strQuery= "DELETE FROM @TableName where _date = '@date'";
 usin (SqlCommand cmd = new SqlCommand(strQuery)){

       cmd.Parameters.AddWithValue("@TableName", tablename+"$" );
       cmd.Parameters.AddWithValue("@date", full_date );

       myCon.Open();

       cmd.ExecuteNonQuery();

 }