C++ 如何添加预防措施以绕过未注册的Microsoft.ACE.OLEDB.12.0?
当我在家用电脑上使用以下代码时,它对我来说很好。但是,我必须在多台不同的机器上使用它C++ 如何添加预防措施以绕过未注册的Microsoft.ACE.OLEDB.12.0?,c++,sql,oledb,oledbconnection,C++,Sql,Oledb,Oledbconnection,当我在家用电脑上使用以下代码时,它对我来说很好。但是,我必须在多台不同的机器上使用它 "Provider = Microsoft.ACE.OLEDB.12.0;" 我在想,可能会有一个解决办法,因为我需要一个更通用的格式,以便它可以在多台机器上工作 "Provider = Microsoft.ACE.OLEDB.12.0;" 我希望有一个解决办法,可能是在代码中包含一个替代提供程序(如果可能的话),或者包含一个catch或if语句,该语句将重新运行代码,但如果找不到第一个,则使用替代提供程序
"Provider = Microsoft.ACE.OLEDB.12.0;"
我在想,可能会有一个解决办法,因为我需要一个更通用的格式,以便它可以在多台机器上工作
"Provider = Microsoft.ACE.OLEDB.12.0;"
我希望有一个解决办法,可能是在代码中包含一个替代提供程序(如果可能的话),或者包含一个catch或if语句,该语句将重新运行代码,但如果找不到第一个,则使用替代提供程序
它将被更改为Microsoft.Jet.OLEDB.4.0
如果有人能编写一点代码来解决这个问题,这样我的程序就可以同时考虑这两个提供者,这将是非常好的,因为这将使我的项目更加通用
背景代码(忽略不安全的SQL,除非您想修复它):
我自己解决了这个问题。我意识到,如果出现异常,我可以在我的类中尝试另一个catch语句来更改连接字符串
conn = gcnew OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0;" +
"Data Source =" + "myDatabaseV3.mdb");
pause();
OleDbCommand^ cmd = nullptr;
//fix this so that it will come out of the current directiory
try {
conn->Open();
}
catch (Exception^ ex)
{
conn->ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0;" +
"Data Source =" + "myDatabaseV3.accdb";
conn->Open();
}
如果你想的话,你可以把它们换一下。它们的顺序其实并不重要。此外,如果此解决方案无效,则可以使用嵌套的try-catch语句。然而,我的代码在一个类中特别具有这种特性,并且无论如何,这种运行方式都是在代码的另一部分的try-catch中,因此对我来说没有必要