我在 Visual Studio 2010 中编写了一个小程序来打开一个 Access 数据库,在表中输入一个值,然后打开一个表单。非常简单,该程序在我的笔记本电脑上运行良好。
当我尝试在第二台 PC 上运行 exe 时出现问题。我无法在表格中输入值。两台电脑都可以用 Visual Studio 2010 打开项目就好了。我运行它时收到的错误是:
"System.Runtime.InteropServices.COMException (0x800A09C5):RunSQL 操作已取消。\r\n 在 Microsoft.Office.Interop.Access.DoCmd.RunSQL(Object SQLStatement, Object UseTransaction)\r\n 在 OpenGasAlarmSheet.Program。 \Program.cs:line 47 中的 Main(String[] args)"
我将一些参数传递到一个字符串中以获得等效的:
String sql = "INSERT INTO tbl_LOG ([ALARM], [DATE])
VALUES ('KNITERV4', #07-17-2012 10:22:29 AM#);"
这是运行该 SQL 字符串的部分程序的代码:
Access.Application oAccess = null;
oAccess = new Access.Application();
oAccess.OpenCurrentDatabase(<file path to mdb>, false);
oAccess.DoCmd.RunSQL(sql); //This is line 47
我已经尝试修复这个错误大约一周了,但我完全陷入了困境。任何帮助将非常感激!!!
谢谢,克里斯
编辑:2012 年 7 月 18 日
这就是我所在的地方......
选项1:
String sql = "INSERT INTO tbl_LOG ([ALARM], [DATE])
VALUES ('KNITERV4', #07-17-2012 10:22:29 AM#);";
oAccess.CurrentDb().Execute(sql); //ERROR HERE
结果是.....
PC #1:工作正常!
PC #2 & #3:错误(见下文)
"System.Runtime.InteropServices.COMException (0x8002801D):库未注册。(来自 HRESULT 的异常:0x8002801D (TYPE_E_LIBNOTREGISTERED))\r\n 在 Microsoft.Office.Interop.Access.ApplicationClass.CurrentDb()\r\n 在测试.Program.Main(String[] args) 在 \Program.cs:line 47"
选项 2:
String sql = "INSERT INTO tbl_LOG ([ALARM], [DATE])
VALUES ('KNITERV4', #07-17-2012 10:22:29 AM#);";
oAccess.DoCmd.RunSQL(sql); //ERROR HERE
结果是.....
PC #1:工作正常!
PC #2 & #3:错误(见下文)
"System.Runtime.InteropServices.COMException (0x800A09C5):RunSQL 操作已取消。\r\n 在 Microsoft.Office.Interop.Access.DoCmd.RunSQL(Object SQLStatement, Object UseTransaction)\r\n 在 OpenGasAlarmSheet.Program。 \Program.cs:line 47 中的 Main(String[] args)"
选项 3:
cn.ConnectionString = oAccess.CurrentProject.Connection.ConnectionString; //ERROR HERE
cn.Open();
rs.ActiveConnection = cn;
rs.LockType = ADODB.LockTypeEnum.adLockBatchOptimistic;
rs.CursorType = ADODB.CursorTypeEnum.adOpenKeyset;
rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient;
rs.Open("tbl_LOG");
rs.AddNew("ALARM", "KNITERV4");
rs.UpdateBatch();
结果是.....
PC #1 & #3:错误(见下文)
"System.Runtime.InteropServices.COMException (0x8000FFFF):灾难性故障(来自 HRESULT 的异常:0x8000FFFF (E_UNEXPECTED))\r\n 在 Microsoft.Office.Interop.Access._CurrentProject.get_Connection()\r\n
在 Test.Program .Main(String[] args) 在 \Test\Program.cs:line 38"
PC #2:工作正常!!!
我不能让这个东西在多台电脑上工作。令人沮丧!:(