【发布时间】:2017-01-18 07:11:02
【问题描述】:
我的程序抛出以下错误
UPDATE 语句中的错误:OleDb (0x80040E14)
没有别的。
在过去的一周里,我一直在通过微调来调整此代码时遇到麻烦,但一切都会发生故障。
这是有效的相同示例:
conn.Open();
string sqls = @"INSERT INTO ABCD SELECT * FROM [Excel 12.0;HDR=YES;DATABASE=" + openFileDialog.FileName + "].[" + txtSheetName.Text + "$];";
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandText = sqls;
cmd.ExecuteNonQuery();
string updater =
@"UPDATE ACTB " + @"INNER JOIN ABCD on ACTB.ID = ABCD.ID " +
@"SET ACTB.Started = ABCD.Started, " +
@"ACTB.Ended = ABCD.Ended ";
cmd.CommandText = updater;
cmd.ExecuteNonQuery();
string deleter = @"DELETE from ABCD";
cmd.CommandText = deleter;
cmd.ExecuteNonQuery();
conn.Close();
我刚刚粘贴了这个,以便你们知道 join 语句的逻辑已经合理。我正在将 Excel 文件中的内容添加到 ID 匹配的 Access 数据库中。 ACTB 包含每一个字段,并且有 20 个字段,除了最后四个之外,其余字段无关紧要:CTC、POI、DOI、AMT,当然还有开头的 ID。 excel文件的结构是一样的:ID、CTC、POI、DOI、AMT,里面有一些数据和与access数据库数据匹配的ID数据。
还有打嗝的代码:
插入语句
conn.Open();
string sqls = @"INSERT INTO ACTC SELECT * FROM [Excel 12.0;HDR=YES;DATABASE=" + openFileDialog.FileName + "].[" + txtSheetName.Text + "$];";
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandText = sqls;
cmd.ExecuteNonQuery();
insert 语句单独起作用,所以我知道 ACTC 表是可以读取的。
其余代码:
string updater =
@"UPDATE ACTB " + @"INNER JOIN ACTC on ACTB.[ID] = ACTC.[ID] " +
@"SET ACTB.[CTC] = ACTC.[CTC], " +
@"SET ACTB.[POI] = ACTC.[POI], " +
@"SET ACTB.[DOI] = ACTC.[DOI], " +
@"ACTB.[AMT] = ACTC.[AMT] ";
cmd.CommandText = updater;
cmd.ExecuteNonQuery();
string deleter = @"DELETE from ACTC";
cmd.CommandText = deleter;
cmd.ExecuteNonQuery();
conn.Close();
我在看另一个保留字问题吗?
我的更新声明有什么问题?
以及如何使这些错误消息更有意义?
【问题讨论】: