我有一个winform应用程序,我在其中读取XML发票,获取它的订单号,然后将其插入到先前加载了发票列表(一种本地跟踪它们的方式)更新行的Excel文件中。
我曾经为97-2003工作表做过,而且工作得很好。但由于我们的用户更喜欢使用2013工作表,因此我开始尝试修改连接字符串以使用它。
我还必须安装Office System Driver:Data Connectivity Components 2007,以便它可以与Microsoft.ACE.OLEDB.12.0
一起使用
当我运行它时,我得到以下异常:
System.Data.OleDb.OleDbExeption(0x80004005):Microsoft Office Access数据库引擎已停止该过程,因为您和另一个用户正在尝试同时更改相同的数据。
因为我目前在当地工作,这很奇怪。目前只有两个用户使用此应用程序,他们只需共享该文件即可使用它。
我有点困惑于此,我一直在阅读有关此内容的更多信息,但我没有成功,当我只是寻找异常结果时说它是关于未找到文件。当我查找异常文本时,我无法获得特定情况的结果。
我已经调试了代码,但是我没有得到太多信息,因为一切都运行良好,直到遇到异常。这基本上就是我在MessageBox
中显示的内容。
代码:
System.Data.OleDb.OleDbConnection MyConnection;
System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
string sql = null;
string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + "C:\\Users\\user\\Desktop\\file.xlsx;" + "Extended Properties=\"Excel 12.0;ReadOnly=False;HDR=Yes\";";
MyConnection = new System.Data.OleDb.OleDbConnection(connectionString);
MyConnection.Open();
myCommand.Connection = MyConnection;
sql = "Update [sheetname$] set OrderNumber= @order where Invoice= @invoice";
myCommand.Parameters.AddWithValue("@order", orderNumber);
myCommand.Parameters.AddWithValue("@invoice", invoiceNumber);
myCommand.CommandText = sql;
myCommand.ExecuteNonQuery();
MyConnection.Close();
答案 0 :(得分:2)
当我在调试期间遇到此错误或类似错误时,我有一个软假设我正在孤立地工作(即因为它是全局的,我是唯一'用户'积极使用工件/数据等) ,问题通常最终是我也是错误消息抱怨的“其他用户”。
当我正在调试DEBUG的调试周期时,很容易无意中让我的代码实例仍在执行测试|停止调试。孤立的代码实例可能仍会锁定各种资源,从而导致您所描述的问题。
检入Windows TaskManager以查看是否可能有一个或多个孤立的代码/调试会话实例。杀死孤立的任务,你开始的下一个DEBUG执行现在应该能够干净地执行。