いろいろと理由があって僕は
TableAdapter
を自分で書いていました。
しかし、毎度毎度作って管理するのも面倒くさいので DataSet のデザイナで自動生成された TableAdapter を使おうと現在試行錯誤しています。
取りあえず、最初に躓いたのが接続文字列です。
例えば、設定画面で接続に必要な諸々のデータを登録して、これに基づいて接続文字列を生成して接続するというような場合の対応方法で悩んでいます。
取りあえず思いついた方法は、以下の2つ。
ちなみに、まだ動作確認はしていません。
(1) Partial Class で接続文字列のプロパティを追加
DataSet のデザイナをダブルクリックすると生成される HogeHogeDataSet.cs というファイルに次のように記述してあげる方法です。
namespace RSoftware.HogeHogeDataSetTableAdapters {
public partial class HogeHogeTableAdapter
{
public string ConnectionString {
get { return this.Connection.ConnectionString; }
set { this.Connection.ConnectionString = value; }
}
}
}
Connection プロパティに初回アクセスすることによって、Connection オブジェクトが生成されるので、このような書き方で接続文字列は変更される筈です。
しかし、この方法だと HogeHogeTableAdapter を使用する度に、使用する側で、毎回接続文字列を設定してあげる必要があります。
・・・しかし、今気付いたんですが、上記のように書かなくても、使用する側で直接Connection.ConnectionString = "独自な接続文字列" としてあげれば良いんじゃないだろうかw
(2) HogeHogeTableAdapter を継承して Connection プロパティを new
これも、DataSet のデザイナをダブルクリックすると生成される HogeHogeDataSet.cs というファイルに次のように記述してみます。
namespace RSoftware.HogeHogeDataSetTableAdapters {
public class HogeHogeTableAdapter2 : HogeHogeTableAdapter
{
internal new global::System.Data.OleDb.OleDbConnection Connection {
get {
base.Connection = "ここで直接指定する";
return base.Connection;
}
set { base.Connection = value; }
}
}
}
これなら、HogeHogeTableAdapter を使用する側は、接続文字列を気にしなくて良いのですが、継承した方を常に使うように意識しなければなりません。
うーん、ほかに何か良い方法は無いものだろうか・・・