ODBC接続のDSN一覧を取得する
C#の組み込み関数でそんな便利なの物は存在しないみたい。
レジストリの中に情報あるからそっから拾う必要があるとのこと。
とりあえず一覧表示して、接続するところまで作ってみました。
まずはDSN一覧の取得
string dsnKeyName = "SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources\\"; int prevLoc = 0; int currLoc = 0; //RegistryKey finalKey = Registry.CurrentUser;//ユーザDSN RegistryKey finalKey = Registry.LocalMachine;//システムDSN do {//キーの値を使いながら掘り下げていくよ currLoc = dsnKeyName.IndexOf("\\",prevLoc); string subKeyStr = ""; if(currLoc != -1) { subKeyStr = dsnKeyName.Substring(prevLoc,currLoc - prevLoc); prevLoc = currLoc + 1; } else { subKeyStr = dsnKeyName.Substring(prevLoc); } if(!subKeyStr.Equals(string.Empty)) { finalKey = finalKey.OpenSubKey(subKeyStr,false); } }while(currLoc != -1); string[] dsnNames = finalKey.GetValueNames();//値を取得 finalKey.Close();
本当は他にも情報取れると思うけどとりあえずこんだけ
必要になったら調べる!
で、接続を試してみる(さっきの続き)
String dsnName = dsnNames[0];//適当なDSNを選択 OdbcConnectionStringBuilder o = new OdbcConnectionStringBuilder(); o.Dsn = dsnName; OdbcConnection con = new OdbcConnection(o.ConnectionString);
これで接続できるようになりました!
いつもデザイナからぺこぺこ選んでたのですが、手で書くと微妙にめんどくさいのですねー