旧的c#程序不再能够通过Jet.OLE.DB读取MS-Access数据库。而且,没有对源代码进行任何更改的新编译也没有帮助。
我的笔记本电脑是Windows 10, MS Office是LTSC Professional Plus 2021 32位。
我卸载了Office LTSC 64位以安装Office LTSC 32位,并且正在尝试安装以下推荐的运行时包来解决问题:
- AccessDatabaseEngine.exe
- mdac28sdk.msi
- AccessRuntime2007.exe
- AccessRuntime_x86_en-us.exe
我们的客户使用MS Access,因为他已经将Excel中的数千个宏链接到Access中,并且无法切换到其他数据库。
在当前的Windows 10 OS 64位环境中不可能使用OLE,这就是我切换到ODBC的原因,它可以工作。
我放弃了使用Visual Studio 2022,现在切换到ACE,因为VS 2022真的很奇怪。我尝试更新当前的VS 2017项目,但我无法选择高于4.8的。我创建了一个新项目然后我可以选择。NET 6或。7如果我选择" Windows窗体应用程序"而不是"Windows窗体应用程序(。NET框架)";但是工具箱是空的。
/*old code*/
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Datenbank + ";";
OleDbConnection conn = new OleDbConnection(connStr);
String strCommand = "SELECT * FROM Tickets WHERE [Ticket_Nummer] = @Ticket_Nummer";
OleDbDataAdapter da = new OleDbDataAdapter(strCommand, conn);
da.SelectCommand.Parameters.Add("@Ticket_Nummer", OleDbType.Integer).Value = Ticket_Nummer;
/*new code*/
string connStr = "Driver={Microsoft Access Driver (*.mdb)};"
+ "Dbq="+ Datenbank+";Uid=Admin;Pwd=;";
OdbcConnection conn = new OdbcConnection(connStr);
String strCommand = "SELECT * FROM Tickets WHERE [Ticket_Nummer] = ?";
OdbcDataAdapter da = new OdbcDataAdapter(strCommand, conn);
da.SelectCommand.Parameters.Add("@Ticket_Nummer", OdbcType.Numeric).Value = Ticket_Nummer;
/*rest code*/
DataSet DataSet = new DataSet();
da.Fill(DataSet, "TICKET");
DataTable dataTable = DataSet.Tables[0];
DataTableReader dr = new DataTableReader(dataTable);