2

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

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

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

是否有一个 Windows 命令(甚至是 VB 代码)来查看这台 Windows 7 机器上的所有 DSN?

4

3 回答 3

4

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

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

于 2013-09-13T18:35:32.703 回答
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
于 2013-09-13T18:40:26.383 回答
3

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

于 2015-06-22T14:57:50.817 回答