2

従来の ASP ページからの SQL クエリが部分的な結果を返すが、エラーは返さないという問題に遭遇した人はいますか?

ページ上の特定のクエリ (システム全体の多くの 1 つ) が、実行されるたびに異なる数の行を返し、常に「正しい」数よりも少ないという状況があります。サーバーに直接。

これは接続タイムアウトに関連している可能性があると思います (これは実行時間の長いクエリで発生し、タイミングがタイムアウトに非常に近いことを示しているため)、タイムアウト エラーは発生していません。代わりに、私が知る限り、エラーは発生せずDataSet、コードがループして結果テーブルを構築する有効な値を返します。

エラーが発生したことを示す兆候がないため、データが完全ではないという示唆もありません。つまり、ユーザーはこのレポートを信頼できなくなります。通常、このシステムでは、「大規模な」クエリで SQL タイムアウトが頻繁に発生し、ページにエラー メッセージが表示されます。

調査

  • HTML ソースをチェックして、見落としているエラーが挿入されていないこと、すべてのタグが整形式であり、期待されるページ要素が存在することを確認しました。これは、結果から特定の行を書き込むエラーではないことを示しています。** さらに、返される行数は毎回異なります。
  • 毎回まったく同じクエリが実行されていることを確認しました。
  • DB のデータがレポートの下で変更されていないことを確認しました (これは過去のものであり、レポートと DB に対するクエリを同時に実行してクロスチェックしました。)
  • queryからエラーを手動で出力しようとしましたが、何も得られません。
  • タイムアウトを変更しようとしました (ただし、これは開発環境でしか実行できず、この問題によりタイムアウトに達するのに十分なデータが DB にないため、これは役に立ちませんでした)。
  • 合計で約 20 行しかないと予想されるため、非常に大きなデータセットでは問題になりません。

従来の ASP ページからの SQL クエリが部分的な結果しか返さないという状況に遭遇した人はいますか? この状態をチェックまたは防止する方法はありますか?

セットアップ:

  • 従来の ASP Web アプリケーション
  • ADODB.ConnectionDB2 サーバーのバックエンド データベースに接続するために、オブジェクト全体で頻繁に使用されます。
  • クエリされたデータに関する限り、データベースは静的です。

共有接続の初期化は次のとおりです。

connString = "Provider=MSDASQL.1;User ID=xxx;Data Source=XXX;Extended Properties=""DSN=XXX;UID=XXX;PWD=XXX;"""
Set conn = Server.CreateObject( "ADODB.Connection" )
Set cmd = Server.CreateObject("ADODB.Command")
conn.Mode = adOpenReadOnly
conn.Open connString
cmd.ActiveConnection = conn
cmd.CommandTimeout = 600

使用方法は次のとおりです。

query = " SELECT blah FROM Foo WHERE ... " ' big long list of clauses defined from user selections.
cmd.CommandText = sql
Set oRs = cmd.Execute

Resposne.Write "<table>..." ' Write table headers here'
Do while (Not oRs.eof)
     Response.Write "<tr>...</tr>" ' WRite details from oRs here
     oRs.MoveNext
Loop
Response.Write "</table>"
4

1 に答える 1

1

クエリに を追加してみてくださいorder by。そうすれば、一度にすべての行が送信され、タイムアウトの問題を除外または除外できます。

于 2012-07-20T17:18:44.127 に答える