2009年11月8日日曜日

ADO.NETでのタイムアウト値のまとめ

ADO.NETでデータベースにアクセスするときこんなかき方をすると思います。

using (TransactionScope ts = new TransactionScope())
{
DataSet1.ProjectDataTable dt1 = new DataSet1.ProjectDataTable();
using (ProjectTableAdapter ta1 = new ProjectTableAdapter())
{
dt1 = ta1.GetData();
}
}
上のプログラムで、SQL Server に接続してデータを取るのですが、このときのタイムアウトは3種類あります。
1.トランザクション処理のトランザクションタイムアウト(デフォルトでは 60 秒) 参考:http://msdn.microsoft.com/ja-jp/library/ms973865.aspx

2.SQL Serverへ接続したときの応答待ちのコネクションタイムアウト(デフォルトで15秒)参考:http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlconnection.connectiontimeout(VS.80).aspx


3.SQLコマンドを実行したときの応答待ちのコマンドタイムアウト(デフォルト30秒)参考:
http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlcommand.commandtimeout(VS.80).aspx

上のテーブルアダプタ操作でそれぞれのタイムアウト値を変更するのは以下の通り。


1.トランザクションタイムアウト変更

using (TransactionScope ts = new TransactionScop(TransactionScopeOption.Required,new TimeSpan(0,0,30))

2.コネクションタイムアウト変更
ta1.Connection.ConnectionTimeOut =10;
dt1 = ta1.GetData();
※TableAdapter.Connectionプロパティのスコープはinternalなので同一アセンブリからしか直接参照できない

3.コマンドタイムアウト変更
どうやら、コードを書かないと無理みたい。
http://gushwell.ldblog.jp/archives/50527778.html
で、CommandTimeOutのプロパティを外だしにして、

ta1.CommandTimeOut=60;
dt1 = ta1.GetData();

0 件のコメント: