QueriesTableAdapter を含む DataSet があります。SqlCommand.CommandTimeout を制御するために、ChangeTimeout というパブリック メソッドを持つ QueriesTableAdapter という部分クラスを追加しました。
partial class QueriesTableAdapter
{
public void ChangeTimeout(int timeout)
{
foreach (System.Data.SqlClient.SqlCommand cmd in CommandCollection)
{
cmd.CommandTimeout = timeout;
}
}
}
QueriesTableAdapter を持つすべての DataSet に対して、実行前に CommandTimeout を設定できます。
using (NameSpace.DataSet.DataSetTableAdapters.QueriesTableAdapter ta =
new NameSpace.DataSet.DataSetTableAdapters.QueriesTableAdapter())
{
ta.ChangeTimeout(3600);
ta.DoSomething();
}
DataSet デザイナで「QueriesTableAdapter」という名前が付けられているため、これはほとんどの場合うまく機能します。私が直面している問題は、一意に名前が付けられた TableAdapters です。たとえば、Person という名前の DataTable と PersonTableAdapter という名前の TableAdaper がある場合、QueriesTableAdaper クラスを作成したのと同じ方法で PersonTableAdapter 部分クラスを作成する必要があります。一意の TableAdapter 名を持つ何百もの DataTables があります。それらのそれぞれに部分クラスを作成したくありません。部分クラスの基になる SqlCommand オブジェクトにグローバルな方法でアクセスするにはどうすればよいですか?