私はADO.Net + C#+ VSTS 2008 + ADO.Netを使用してSQL Server 2008 Enterpriseに接続しています。私は、ADO.Net DataReaderを使用して、1つのエントリ(行)で1つのエントリ(行)を取得するのとほぼ同じパターン/サンプルをここで使用しています。ADO.Net DataReaderタイムアウトの問題
http://msdn.microsoft.com/en-us/library/haa3afyz.aspx
私の質問は、合計、私はこのサンプルでSqlCommandオブジェクトのタイムアウト、 1を設定した場合、私はタイムアウトは、我々は1つのspecifc行を取得するために、最大値として使用することができますどのくらいの時間に適用されると思いますが、ではありません全体のentry-by-entryループのタイムアウト?ところで
:私は意味ループ、
while (reader.Read())
{
Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
reader.GetString(1));
}
2. と、このタイムアウトは唯一それがデータベースからのデータ入力を取得するのにかかるどのくらいの時間が重要、とこのタイムアウトは、我々が扱うどのくらいの時間とは何の関係もありません(たとえば、タイムアウトを20秒に設定した場合、データベースから1つのデータエントリを取得するのに1秒かかる場合、アプリケーションロジックがデータエントリを操作するのに30秒かかるため、タイムアウトは起こりません)。
正しく理解していますか?
Marcさん、ありがとうございます。1. DataReaderのシナリオを意味するのですか?DataReaderインスタンスを受け取ったとき、タイムアウトが効きませんか? 2.もしそうなら、私はDataReaderの前にいくつかのドキュメントを読んでいますが、ADO.Netはストリーミング・フェーズでデータを取得します。つまり、DataReaderの作成時にSQL Serverからすべてのデータが取得されるわけではありません。これが当てはまる場合は、ADO.NetクライアントとSQL Serverサーバー側の間の転送が増えるはずです。しかし、DataReaderが作成された後、タイムアウトがそれ以上影響を与えないと言ったので、それ以上のストリーミング転送のタイムアウトコントロールはありませんか? – George2
私の上記のコメントに対する私の懸念は、クライアントがDataReaderを非常に長く保持していることと、ストリーミングモード(ADO.Netはクライアントがより多くのデータを読み込もうとしているのか、接続は常に維持されます。私はそのような長いライブリーダーがADO.Netからの接続を閉じる/解放させるような動作のタイムアウト制御をしたい。任意のSqlCommand(DataReaderを作成するために使用)タイムアウトは私が探しているものではないようですか?ありがとう。 – George2
あなたは絶対に正しいです。長い間DataReaderを開いたままにしておくと、その同じ時間に基になる接続が開いたままになります。あなたがこれをやめないようにするタイムアウトはありません。あなたがこれをあまりにも長くしないようにするのはあなたの責任です。 –