Windows命令查看所有DSN?

时间:2013-09-13 17:50:06

标签: odbc datasource dsn

我有一些VB代码连接到这台Windows机器上的DSN(数据源)设置。代码如下:

Dim myConnection As OdbcConnection = New OdbcConnection()
myConnection.ConnectionString = "DSN=MYALERTS"

它仍然有用&连接,但是设置它的用户不再是。我需要查看/编辑它,但当我进入Windows中的“ODBC数据源管理器”时,我看不到列出的DSN。我认为这是因为我是我自己的用户。即使在“系统DSN”选项卡下,列表也是空白的。

是否有Windows命令(甚至VB代码)可以查看此Windows 7计算机上的所有DSN?

3 个答案:

答案 0 :(得分:3)

我能够在注册表中查看所有DSN:

  

HKEY_LOCAL_MACHINE->软件 - > ODBC的> ODBC.INI

答案 1 :(得分:3)

这将从Windows注册表中打印用户系统 DSN(数据源名称)。

Module ModuleDsn

    Public Enum DataSourceType
        System
        User
    End Enum

    Sub Main()
        Dim SU As SortedList = GetDataSourceNames(DataSourceType.User)
        Dim SS As SortedList = GetDataSourceNames(DataSourceType.System)
        Dim count As Integer = SU.Count + SS.Count
        Dim mKeys As [String]() = New String(count - 1) {}
        SU.Keys.CopyTo(mKeys, 0)
        SS.Keys.CopyTo(mKeys, SU.Keys.Count)
        For i As Integer = 0 To mKeys.Length - 1
            Console.WriteLine(mKeys(i))
        Next
    End Sub

    Public Function GetDataSourceNames(ByVal dsnType As DataSourceType) As System.Collections.SortedList
        Dim dsnList As New System.Collections.SortedList()
        Dim reg As Microsoft.Win32.RegistryKey = Nothing

        If dsnType = DataSourceType.User Then
            reg = (Microsoft.Win32.Registry.CurrentUser).OpenSubKey("Software")
        Else
            reg = (Microsoft.Win32.Registry.LocalMachine).OpenSubKey("Software")
        End If

        If reg IsNot Nothing Then
            reg = reg.OpenSubKey("ODBC")
            If reg IsNot Nothing Then
                reg = reg.OpenSubKey("ODBC.INI")
                If reg IsNot Nothing Then
                    reg = reg.OpenSubKey("ODBC Data Sources")
                    If reg IsNot Nothing Then
                        For Each sName As String In reg.GetValueNames()
                            dsnList.Add(sName, DataSourceType.User)
                        Next
                    End If
                    Try
                        reg.Close()
                    Catch
                    End Try
                End If
            End If
        End If
        Return dsnList
    End Function

End Module

答案 2 :(得分:3)

我意识到这有点过时了,但也许会对某人有所帮助。在64位Windows操作系统上使用ODBC管理器时,您将只看到64个ODBC连接。如果您要寻找的连接设置为32位,则可以浏览到\ Windows \ SysWOW64 \ odbcad32.exe小程序并管理旧版32位DSN。在处理编译为32位目标的应用程序时,这很有用。