指定された範囲内のすべての日付の金額を合計します。
ロジックは似ています - while ループでは、日付範囲の金額列の合計を取得し、その合計を別の変数に追加します
日付範囲によっては、実行に 1 ~ 3 分かかります。
このため、コード側でタイムアウト例外が発生しています。
時間を短縮するためにストアド プロシージャに変更を加えることはできますか、または例外がスローされないようにコードでこれを処理する他の方法はありますか。
助けてください...
クエリを記述する方法は 1 つではありません。OUTER JOIN を使用したクエリに時間がかかる場合は、INNER JOIN を使用して書き直してください。または、過度のデータベース読み取り操作を引き起こすような方法で WHERE 句が記述されている可能性があります。
テーブルを正規化すると理想的なデータベース設計が得られますが、多くの場合、クエリが不十分になります。頻繁に使用されるクエリがあまりにも多くの正規化されたテーブルにまたがる必要がある場合は、データの重複を検討してください。
適切に定義されたインデックスの欠如は、クエリの実行に長い時間がかかる原因となることがよくあります。インデックスを作成すると、クエリはテーブルではなくインデックスを検索します。
ストアド プロシージャでクエリ実行時間をアクティブにすることから始めて、何が時間がかかるかを確認します。
SET STATISTICS TIME ON から * を選択 ...
次の方法で、クエリの実行計画をグラフィカルに表示することもできます。 [クエリ] > [実際の実行計画を含める] をクリックします。
クエリ パフォーマンス チューニングの詳細については、 Pinal Dave のブログを参照してください。これに関しては、彼が最高です。
正しい方法は手順を最適化することですが、コードを投稿しなかったため、それについて何も言えません。別の方法は、症状を処理して、Connectionstringのタイムアウトを次のように増やしても例外がスローされないようにすることです。
"CommandTimeout = try any greater value;"
クエリにその時間が本当に必要な場合は、SqlCommandのCommandTimeout プロパティを適切な値に設定することで、タイムアウトを防ぐことができます。
ただし、最初にクエリを最適化できるかどうかを確認してください。