如何在.NET中读取ODBC数据源名?
事实上,所有的ODBC数据源名都存放在Windows系统的注册表中。如果你知道注册表中正确的项值,你就可以通过.NET Framework类库提供的注册表类来读取该项值下的所有DSN列表。
所有ODBC数据源名都存放在Windows注册表下的:LocalMachine\ODBC\ODBC.INI\ODBC Data Sources(系统DSN)和CurrentUser\Software\ODBC\ODBC.INI\ODBC Data Sources(用户DSN) 键值中。
Imports Microsoft.Win32 '引用名字空间
下面的源代码是演示读取ODBC DSN列表内容并加入到ListBox控件中。来测试这段代码,建立一个Windows 应用程式,添加一个ListBox控件到窗体表单中,并将ReadODBCDSNs方法加到程式代码中。然后,可用一个命令按钮的单或双击事件或用窗体的导入事件来引用这个方法。
[C#]
[VB.NET]
运行效果图
所有ODBC数据源名都存放在Windows注册表下的:LocalMachine\ODBC\ODBC.INI\ODBC Data Sources(系统DSN)和CurrentUser\Software\ODBC\ODBC.INI\ODBC Data Sources(用户DSN) 键值中。
Imports Microsoft.Win32 '引用名字空间
下面的源代码是演示读取ODBC DSN列表内容并加入到ListBox控件中。来测试这段代码,建立一个Windows 应用程式,添加一个ListBox控件到窗体表单中,并将ReadODBCDSNs方法加到程式代码中。然后,可用一个命令按钮的单或双击事件或用窗体的导入事件来引用这个方法。
[C#]
1private void ReadODBCSNs()
2 {
3 string str;
4 RegistryKey rootKey;
5 RegistryKey subKey;
6 string[] dsnList;
7 rootKey = Registry.LocalMachine;
8 str = "SOFTWARE\\\\ODBC\\\\ODBC.INI\\\\ODBC Data Sources";
9 subKey = rootKey.OpenSubKey(str);
10 dsnList = subKey.GetValueNames();
11 ListBox1.Items.Add("System DSNs");
12 ListBox1.Items.Add("================");
13 //string dsnName;
14 foreach (string strdsnName in dsnList)
15 {
16 ListBox1.Items.Add(strdsnName);
17 }
18 subKey.Close();
19 rootKey.Close();
20 rootKey = Registry.CurrentUser;
21 str = "SOFTWARE\\\\ODBC\\\\ODBC.INI\\\\ODBC Data Sources";
22 subKey = rootKey.OpenSubKey(str);
23 dsnList = subKey.GetValueNames();
24 ListBox1.Items.Add("================");
25 ListBox1.Items.Add("UserDSNs");
26 ListBox1.Items.Add("================");
27 foreach (string dsnName in dsnList)
28 {
29 ListBox1.Items.Add(dsnName);
30 }
31 subKey.Close();
32 rootKey.Close();
33 }
2 {
3 string str;
4 RegistryKey rootKey;
5 RegistryKey subKey;
6 string[] dsnList;
7 rootKey = Registry.LocalMachine;
8 str = "SOFTWARE\\\\ODBC\\\\ODBC.INI\\\\ODBC Data Sources";
9 subKey = rootKey.OpenSubKey(str);
10 dsnList = subKey.GetValueNames();
11 ListBox1.Items.Add("System DSNs");
12 ListBox1.Items.Add("================");
13 //string dsnName;
14 foreach (string strdsnName in dsnList)
15 {
16 ListBox1.Items.Add(strdsnName);
17 }
18 subKey.Close();
19 rootKey.Close();
20 rootKey = Registry.CurrentUser;
21 str = "SOFTWARE\\\\ODBC\\\\ODBC.INI\\\\ODBC Data Sources";
22 subKey = rootKey.OpenSubKey(str);
23 dsnList = subKey.GetValueNames();
24 ListBox1.Items.Add("================");
25 ListBox1.Items.Add("UserDSNs");
26 ListBox1.Items.Add("================");
27 foreach (string dsnName in dsnList)
28 {
29 ListBox1.Items.Add(dsnName);
30 }
31 subKey.Close();
32 rootKey.Close();
33 }
[VB.NET]
1Private Sub ReadODBCSNs()
2
3Dim str As String
4Dim rootKey As RegistryKey, subKey As RegistryKey
5Dim dsnList() As String
6rootKey = Registry.LocalMachine
7str = "SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources"
8subKey = rootKey.OpenSubKey(str)
9dsnList = subKey.GetValueNames()
10ListBox1.Items.Add("System DSNs")
11ListBox1.Items.Add("================")
12Dim dsnName As String
13
14For Each dsnName In dsnList
15ListBox1.Items.Add(dsnName)
16Next
17subKey.Close()
18
19rootKey.Close()
20
21'Load User DSNs
22rootKey = Registry.CurrentUser
23str = "SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources"
24subKey = rootKey.OpenSubKey(str)
25dsnList = subKey.GetValueNames()
26
27ListBox1.Items.Add("================")
28ListBox1.Items.Add("UserDSNs")
29ListBox1.Items.Add("================")
30
31For Each dsnName In dsnList
32ListBox1.Items.Add(dsnName)
33Next
34subKey.Close()
35
36rootKey.Close()
37End Sub
2
3Dim str As String
4Dim rootKey As RegistryKey, subKey As RegistryKey
5Dim dsnList() As String
6rootKey = Registry.LocalMachine
7str = "SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources"
8subKey = rootKey.OpenSubKey(str)
9dsnList = subKey.GetValueNames()
10ListBox1.Items.Add("System DSNs")
11ListBox1.Items.Add("================")
12Dim dsnName As String
13
14For Each dsnName In dsnList
15ListBox1.Items.Add(dsnName)
16Next
17subKey.Close()
18
19rootKey.Close()
20
21'Load User DSNs
22rootKey = Registry.CurrentUser
23str = "SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources"
24subKey = rootKey.OpenSubKey(str)
25dsnList = subKey.GetValueNames()
26
27ListBox1.Items.Add("================")
28ListBox1.Items.Add("UserDSNs")
29ListBox1.Items.Add("================")
30
31For Each dsnName In dsnList
32ListBox1.Items.Add(dsnName)
33Next
34subKey.Close()
35
36rootKey.Close()
37End Sub
运行效果图