如何使用驱动程序对提取和存储 ODBC

How to extract and store ODBC with driver pairs

我有一个应用程序可以从计算机中提取所有 ODBC 连接并将它们放入组合框中。然后,用户从组合框中选择一个 ODBC 连接,并提供用户名和密码,然后用于连接到数据库。我已经能够通过这种方式连接到一个简单的 Northwind Access 数据库,但是在针对更复杂的数据库进行测试时,我收到了驱动程序错误的错误消息。这就是我用来获取 ODBC 连接的方法:

RegistryKey sysODBC = (Registry.LocalMachine).OpenSubKey("SOFTWARE").OpenSubKey("ODBC").OpenSubKey("ODBC.INI").OpenSubKey("ODBC Data Sources");
string[] DSNArray = sysODBC.GetValueNames().ToArray();

OdbcConnection conn = new System.Data.Odbc.OdbcConnection(ConnectionString);

我看到有一个

conn.Driver

属性,但我很难找到如何加载驱动程序信息以及如何将其分配给驱动程序 属性。如有任何帮助,我们将不胜感激。

代码可以稍微清理一下,但这对我有用:

public List<Tuple<string, string>> ListODBCsources()
{
    int envHandle = 0;
    const int SQL_FETCH_NEXT = 1;
    const int SQL_FETCH_FIRST_SYSTEM = 32;
    List<Tuple<string, string>> ODBCNameDriverList = new List<Tuple<string, string>>();            

    if (OdbcWrapper.SQLAllocEnv(ref envHandle) != -1)
    {
        int returnValue;
        StringBuilder serverName = new StringBuilder(1024);
        StringBuilder driverName = new StringBuilder(1024);
        int snLen = 0;
        int driverLen = 0;
        returnValue = OdbcWrapper.SQLDataSources(envHandle, SQL_FETCH_FIRST_SYSTEM, serverName, serverName.Capacity, ref snLen,
                driverName, driverName.Capacity, ref driverLen);
        while (returnValue == 0)
        {
            ODBCNameDriverList.Add(Tuple.Create(serverName.ToString(), driverName.ToString()));
            //MessageBox.Show(serverName + System.Environment.NewLine + driverName);
            returnValue = OdbcWrapper.SQLDataSources(envHandle, SQL_FETCH_NEXT, serverName, serverName.Capacity, ref snLen,
                driverName, driverName.Capacity, ref driverLen);
        }
    }
    return ODBCNameDriverList;
}