我的机器上有DSN列表
private IEnumerable<string> EnumDsn(Microsoft.Win32.RegistryKey rootKey)
{
Microsoft.Win32.RegistryKey regKey = rootKey.OpenSubKey(@"Software\ODBC\ODBC.INI\ODBC Data Sources");
if (regKey != null)
{
foreach (string name in regKey.GetValueNames())
{
string value = regKey.GetValue(name, "").ToString();
yield return name;
}
}
}
我的目的是获取每个DSN的驱动程序类型,以及如何获取它。
答案 0 :(得分:0)
您可以从odbccp32.dll调用SQLGetPrivateProfileString Function来检索您要查找的信息。
使用"ODBC Data Sources"
作为lpszSection的参数,使用数据源名称(DSN)作为lpszEntry的参数。缓冲区中返回的值将是您的驱动程序名称。
在C#中导入DLL和函数如下所示:
[DllImport("odbccp32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
private static extern int SQLGetPrivateProfileStringW(string lpszSection, string lpszEntry, string lpszDefault, char[] RetBuffer, int cbRetBuffer, string lpszFilename);
在VB.NET中看起来像这样:
<DllImport("odbccp32.dll", SetLastError:=True, CharSet:=CharSet.Unicode)> _
Private Shared Function SQLGetPrivateProfileStringW(lpszSection As String, lpszEntry As String, RetBuffer As Char(), cbRetBuffer As Integer, lpszFilename As String) As Integer