だらだらやるよ。

こげつのIT技術メモ

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);

これで接続できるようになりました!
いつもデザイナからぺこぺこ選んでたのですが、手で書くと微妙にめんどくさいのですねー