当我尝试使用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捕获该错误。