我正在尝试更新 Excel 工作表的单个单元格。请注意,在下面的示例代码中,我将变量用于列和行,因为这会根据程序的其他部分而改变,但出于调试目的,我将它们分别设置为 A 和 1。
现在我收到一条错误消息“查询表达式'06:31 PM'中的语法错误(缺少运算符)。
请不要简单地建议我参数化,因为我知道这不会解决我的问题而且我不担心注入。
提前谢谢大家。
string newColumn = "A";
string newRow = "1";
string worksheet2 = strMonth;
var cnnStr2 = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;IMEX=1;HDR=NO\"", textBox1.Text);
var cnn2 = new OleDbConnection(cnnStr2);
cnn2.Open();
string sql2 = String.Format("UPDATE [{0}$] SET {1}{2}={3}", worksheet2, newColumn, newRow, dtpTime.Text.Substring(0, 8));
OleDbCommand objCmdSelect = new OleDbCommand(sql2, cnn2);
objCmdSelect.ExecuteNonQuery();
cnn2.Close();
编辑:根据 Gerhard 建议的链接,我已将命令文本更改为以下内容:
string sql2 = String.Format("UPDATE [{0}${1}{2}:{1}{2}] SET F1='{3}'", worksheet2, newColumn, newRow, dtpTime.Text.Substring(0, 8));
这现在会产生错误“操作必须使用可更新查询”。不知道现在该怎么办。{1}{2}:{1}{2} 给出了工作表 {0}$ 上的单个单元格范围,如果没有我在 HDR= 的连接字符串中指定的列名,则 F1 是给出的默认列名不。最后,{3} 是我用来更新单元格的子字符串,它用单引号括起来,因为这似乎是每个人都在做的事情。如果我删除单引号,它只会产生不同的错误。