Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何添加预防措施以绕过未注册的Microsoft.ACE.OLEDB.12.0?_C++_Sql_Oledb_Oledbconnection - Fatal编程技术网

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中,因此对我来说没有必要