OleDbException:"查询表达式中的语法错误(缺少运算符)'' WIP''''。'。更新特定单元格时

时间:2015-08-11 22:11:21

标签: c# sql excel oledb

当我尝试使用OleDb更新Excel工作表上的特定单元格时,我遇到了此错误。下面是抛出异常的函数。

private void WriteExcelFile()
{
    string connectionString = GetConnectionString(excelPath);

    using (OleDbConnection conn = new OleDbConnection(connectionString))
    {
        string sql = null;

        conn.Open();
        OleDbCommand cmd = new OleDbCommand();
        cmd.Connection = conn;

        for (int i = 0; i < valsEdited.Count; i++)
        {
            sql = "update [Sheet1$" + GetColName(colsEdited[i]) + (rowsEdited[i] + 2).ToString() + ":" + GetColName(colsEdited[i]) + (rowsEdited[i] + 2).ToString() + "] set Status='" + valsEdited[i] + "'";
            sql.Replace("'", "''");
            cmd.CommandText = sql;
            cmd.ExecuteNonQuery(); //Exception thrown here
        }
        cmd = null;
        conn.Close();

        colsEdited.Clear();
        rowsEdited.Clear();
        valsEdited.Clear();
    }
}

我用断点检查了很多次,sql语句对我来说似乎很好:

update [Sheet1$A1:A1] set Status = "Completed"

这让我疯狂。请帮忙!

修改

以下是澄清我的代码的一些注释:

private string GetConnectionString(string s)在给定路径的情况下向相关的excel文件返回连接字符串。

private string GetColName(int i)返回一个表示Excel列的字符串,给出了C#中的列索引。

List<int> colsEdited是一个列表,其中包含用户正在编辑的某些DataGridView中的所有列。

List<int> rowsEdited是一个列表,其中包含用户正在编辑的某些DataGridView中的所有行。

List<int> valsEdited是一个列表,其中包含用户在某些DataGridView中编辑的所有新值。

更新 我已更新代码以反映当前版本的代码。感谢Lars捕获该错误。

0 个答案:

没有答案