如何使用驱动程序对提取和存储 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;
}
我有一个应用程序可以从计算机中提取所有 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;
}