2

この Windows マシンの DSN (データ ソース) セットアップに接続する VB コードがあります。コードは次のようになります。

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

それはまだ機能して接続しますが、これを設定したユーザーはもういません。これを表示/編集する必要がありますが、Windows で「ODBC データ ソース アドミニストレーター」に移動すると、DSN が一覧表示されません。これは、自分のユーザーの下にいるためだと思います。「システム DSN」タブの下でも、リストは空白です。

この Windows 7 マシン上のすべての DSN を表示する Windows コマンド (または VB コード) はありますか?

4

3 に答える 3

4

レジストリ内のすべての DSN を表示できました。

HKEY_LOCAL_MACHINE->SOFTWARE->ODBC->ODBC.INI

于 2013-09-13T18:35:32.703 に答える
3

これは少し時代遅れだと思いますが、おそらく誰かを助けるでしょう。64 ビット Windows OS で ODBC マネージャーを使用すると、64 個の ODBC 接続しか表示されません。探している接続が 32 ビット用に設定されている場合は、\Windows\SysWOW64\odbcad32.exe アプレットを参照して、従来の 32 ビット DSN を管理できます。これは、32 ビットをターゲットとしてコンパイルされたアプリケーションで作業する場合に役立ちます。

于 2015-06-22T14:57:50.817 に答える
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 に答える