- PR -

VB.NETでの不特定DBの検索

1
投稿者投稿内容
みさくら軟膏
会議室デビュー日: 2004/04/30
投稿数: 5
投稿日時: 2004-04-30 16:01
初めて質問させていただきます。

現在VB.NETでの開発を行っており、sqldateAdapter、sqlconnection、DataSetを使用して他PCのSQLサーバへのアクセスをしております。

開発環境ではこの方法で問題なくデータのやり取りができるのですが、実行環境では開発環境とテーブル名は同じなのですが、サーバ名が違うためにsqldateAdapterの設定を変更して接続先を変えなくてはなりません。
しかし、サーバーや実行環境がいつも同じとは限らないので毎回そのようなことをする訳にもいかず、汎用性を持たせるために現在接続できるサーバを検索し、そこから接続を確立するような方法を取りたいのですが、そのようなことは可能なのでしょうか。

みさくら軟膏
会議室デビュー日: 2004/04/30
投稿数: 5
投稿日時: 2004-04-30 16:03
二重投稿してしまいました。

すみません・・・
秀人
常連さん
会議室デビュー日: 2003/02/19
投稿数: 22
お住まい・勤務地: 東京都
投稿日時: 2004-04-30 16:59
connectionをGUIからではなく、接続が変わるつどコードで書き換えてみてはどうでしょうか。

こんな感じで。
this.odbcConnection.ConnectionString = "DSN="+dsn+";UID="+user_id+";DBALIAS="+dsn+";MODE=SHARE;PWD="+password;

この場合dsn,user_id,passwordはiniファイルから呼んでセットしています。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-04-30 18:02
可能かどうかといえば、試してませんがおそらく可能かと思います。
SQLDMO.dll にSQLServer2000を扱うための機能があるようです。
参考:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sqldmo/dmoref_ob_s_7igk.asp

サンプルとして、こんなページがありました。(C#ですけど)
http://www.csharphelp.com/archives2/archive342.html
Application.ListAvailableSQLServers() でSQLServer名のコレクションが取得できたりするようですね。

しかし「サーバーを検索して接続」ということは、存在する全てのSQLServerの全てのデータベースに接続を試行して、テーブルの構造などから接続したいデータベースか確認するわけですよね?
パフォーマンスは大丈夫ですか?
接続できるデータベースが複数あった場合はどうします?

「アプリケーション構成ファイル」に接続文字列を書くなどというのはまずいんですか。
もし「アプリケーション構成ファイル」についてご存知ないのであれば調べてみてください。XXX.configというファイルのことです。
コンパイルし直さなくてもそれを書き換えるだけで接続先を変えられます。



以下余談ですが・・・
DHCPでは、ブロードキャストで要求を出して返答があればそのホストとやり取りすることに決めます。
MTA(Mail Transfer Agent)は、まず接続先ホストを教えてくれるホスト(DNS)にアクセスし、それに教えてもらったホストに接続することにします。(多分……違ったらごめんなさい)

片っ端から接続を確立していって、自分が接続するべきサーバーなのかどうかを確かめるというような方法は普通しないと思うんですが。パフォーマンスの点からも。
みさくら軟膏
会議室デビュー日: 2004/04/30
投稿数: 5
投稿日時: 2004-05-04 13:45
秀人さん、一郎さん、レスありがとうございます。

質問を書き込んだ後、私も秀人さんと同じような方法を思いつきました。(まだ実装していませんが)
すべての接続先を取得なんかしていると一郎さんが書かれているような問題が多々発生するので、あくまで接続先はアナログに人の手で設定してやって、あとはそれを外部ファイルで読み込めばいいのかな、と。

でもそんな必要もなさそうですね。「アプリケーション構成ファイル」ですか・・・
一度調べてみます。

どうもありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-04 15:07
 私は、設定をするためのページを作りました。

DataSource : Oraccle / SQL Server ← radiobutton
User Name : ← textbox
Password : ← textbox

これを単独の、シリアライズ可能なクラスとし、All UsersディレクトリにXMLシリアライズして保存しています。

 接続文字列を取得するクラスの、静的メソッドで、デシリアライズして取り出し、接続文字列に整形して返すようにしています。
みさくら軟膏
会議室デビュー日: 2004/04/30
投稿数: 5
投稿日時: 2004-05-04 16:59
Jittaさん

>私は、設定をするためのページを作りました。
なるほど・・・そういう手もありですね。
とにもかくにも、何かしらの方法で人の手で設定させるのが一番のようですね。

どうもありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)