データバインドが自動的に行われるように、DataSourceIDが設定されたgridviewがあります。問題は、SqlDataSourceで定義されたプロシージャが完了するまでに非常に時間がかかることがあるため、バインドにタイムアウトのエラーが発生することがあります。GridView自動データバインディングのキャッチエラー
グリッドビューを手動でデータバインドしてtry/catchステートメントで囲むことなくこのエラーをキャッチするにはどうすればよいですか?
データバインドが自動的に行われるように、DataSourceIDが設定されたgridviewがあります。問題は、SqlDataSourceで定義されたプロシージャが完了するまでに非常に時間がかかることがあるため、バインドにタイムアウトのエラーが発生することがあります。GridView自動データバインディングのキャッチエラー
グリッドビューを手動でデータバインドしてtry/catchステートメントで囲むことなくこのエラーをキャッチするにはどうすればよいですか?
代わりにクエリのタイムアウトの問題を解決するのはなぜですか? DBを最適化するか(推奨)、接続/コマンドのタイムアウトを現在の値より大きく設定します。 SqlDataSource Selecting eventにフックして、次のように
あなたはタイムアウトを調整することができます:あなたはSQL Serverを使用している場合は、インデックスチューニングウィザード/ tuning advisor、show query execution planまたはSQL Server Profilerのようなツールで見たいと思うかもしれません
protected void ds_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
e.Command.CommandTimeout = 5000;
}
。
非同期バインドはどうですか?一度完了すると、エラーが返されなかった場合、コールバック関数はdatabindを呼び出すことができます。
編集:私はそれがマニュアルだと思います...あなたが望むものではありません。この場合に選択、 -
ザ・は、それはその適切な事後イベントを発生させ、SqlDataSourceコントロールが実行されているときに例外が発生した場合、あなたがのPage_Errorイベント
を処理している行うことができると思います。必要に応じて、このイベントのイベントハンドラを作成し、イベントハンドラでその例外を処理したことを伝えることができます。
この図は、この相互作用がObjectDataSourceとどのように機能するかを示しています(概念はSqlDataSourceコントロールと同じです)。下の図を調べるときは、「ObjectDataSource」という単語を「SqlDataSource」と「Underlying Object」で「Database」に置き換え、SqlDataSourceに関連させます。
あなたが見ることができるように、データがデータベースにオフに送信され、選択されたイベントは、データが戻ってきた後に発生(または例外があります場合)される前に、Selectingイベントが発生します。
ページでSelectedイベントハンドラを作成し、例外が発生したかどうかを確認して、自分で処理するかどうかを判断できます。 Fredrik Normenはこれに関する良いブログエントリを持っています:Handle the data-source control exception by your own.
追加の読書資料:Accessing and Updating Data in ASP.NET: Examining the Data Source Control's Events。
ハッピープログラミング!
問題は、開発サーバーでうまくいくいくつかの手順がありますが、本番のもの(さまざまなSQL Serverのバージョン)に読み込むのに非常に時間がかかることです。 これらのすべてを特定して修正するまで、タイムアウトエラーをもう少しユーザーフレンドリーなものに置き換えたいと思います。 –
この場合、DataSourceとDataBindを使用してください。 – RichardOD
Sql DataSourceコントロールで使用されているタイムアウトによって発生した例外をキャッチする方法はありません。したがって、このシナリオではDataSourceとDataBindの「古い学校」の方が効果的です。コード例は次のとおりです。http://msdn.microsoft.com/en-us/library/fkx0cy6d.aspx – RichardOD