2017-05-22 10 views
0

私はODBC名、データベース名、ユーザーID、パスワードを提供するログインウィンドウを持っています。一方、私はSQL Serverの名前が必要接続文字列です。 ODBC名の助けを借りてそれぞれのSQL Server名を見つける方法はありますか?私はC#プログラミングの初心者であり、可能かどうか分からない。C#のデータソース名の助けを借りてSQL Server名を見つける

enter image description here

enter image description here

+0

すべてのODBC設定はレジストリに格納されています:) – BugFinder

+2

これは本当に動的でなければなりませんか?正面を知っているなら、一度見つけたら接続文字列にサーバー名をつけてください。あなたが必要とするすべての接続文字列の完全なリストについては、https://www.connectionstrings.com/をご覧ください。 – Jeremy

+1

ODBC DSNをお持ちの場合は、 'OdbcConnection'を使用し、サーバー名は必要ありません。 ODBC DSNデータを使用して、ADO.NET接続に使用できるSQL Server名を抽出するのは非常に理にかなっています。そのようなことは、アプリケーションの '.config'に接続文字列を格納することでより適切に行われます。 –

答えて

0

は、基本的にシステムは、HKEY_LOCAL_MACHINE \ SOFTWAREここでDSN情報を保存する\ ODBC \ ODBC.INI

このコードは、基本的には、レジストリからこの情報を読み取って

static void Main(string[] args) 
{ 
    string DSN = "TEST"; 
    using (Microsoft.Win32.RegistryKey localMachineHive = Registry.LocalMachine) 
    using (RegistryKey odbcDriversKey = localMachineHive.OpenSubKey(string.Format(@"SOFTWARE\ODBC\odbc.ini\{0}", DSN))) 
    { 
     if (odbcDriversKey != null) 
     { 
      Console.Write(odbcDriversKey.GetValue("Server").ToString()); 
     } 
    } 
    Console.Read(); 
} 

場合DSNに関する詳細情報が必要な場合は、以下のコードで必要なサブキー名のリストを表示します。

static void Main(string[] args) 
    { 
     string DSN = "TEST"; 
     string[] subKeyNames = null; 
     using (Microsoft.Win32.RegistryKey localMachineHive = Registry.LocalMachine) 
     using (RegistryKey odbcDriversKey = localMachineHive.OpenSubKey(string.Format(@"SOFTWARE\ODBC\odbc.ini\{0}", DSN))) 
     { 
      subKeyNames = odbcDriversKey.GetValueNames(); 
      foreach (var subKey in subKeyNames) 
      { 
       Console.WriteLine(subKey.ToString()); 
      } 

     } 
     Console.Read(); 
    } 

//Result will be 

//Driver 
//Server 
//LastUser 
//... 
//.. 
//. 
関連する問題