2009-06-10 5 views
0

何年も問題なく実行されていたC++アプリケーション(SQL 2000データベースに対してWindows 2000サーバーで実行されているVS2003でコンパイルされています)odbcとC++の例外の問題により、データベースの動作が奇妙に変化する

ログには、データベース接続(SQL Serverドライバを使用したODBC)が正常に動作していることが示されています(データベースの読み取りと更新)。例外がスローされた後(キャッチ/ログに記録されますが、データベースから更新できますが、もはやデータベースを更新することはできません。

スレッドが処理する次の行を読み込んでいて、別のサーバーにソケットからデータを送信していて、レコードを処理してBOOMとして更新しようとしています。

私は失敗したクエリから取り戻す唯一のエラー情報は、次のとおりです。あなたは、通常、クエリが失敗した理由を確認する場所のような空白が続く

[Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could not be prepared. [37000] 

(不正な構文、テーブルが見つかりました、何ではなく、今回は何もない)。

このコードでは、何千ものレコードが処理され、このスレッドの直後(常に最初の犠牲者であるように見えますが、最も忙しくて最初に殴られることがあります)同じ問題です - 読み取りは許可されますが、更新はこの例外をスローします。

私はタスクマネージャを最後に見ました(私は長い間調べることができないので、すぐにバウンスします)。アプリケーションは通常5〜6メガバイトのRAMを使用していました。

他のアプリケーションがデータベースを使用しており、この間にエラーは発生していません。

クエリが有効であるときに、この報告されたエラーの結果を取得する場所私はオンライン何かを見つけることができません

...

HELP!

答えて

0

"[Microsoft] [ODBC SQL Server Driver] [SQL Server]ステートメントを準備できませんでした。[37000]" ODBCドライバが文を準備しようとしていると仮定します。これは私たちに多くの不安定な問題を引き起こしました。

ODBCデータソースの定義で、「準備されたSQLの一時ストアドプロシージャを作成...」オプションのチェックを外し、エラーが修正されているかどうかを確認します。

0

nullが許可されていない場合、更新ステートメントがそのフィールドに対して大きすぎるデータを書き込んでいる可能性がありますか?

おそらく、ファイルに更新を記録して、問題がデータ駆動型であるかどうかを判断できます。

SQL ServerのODBCドライバでADOが使用されているかどうかはわかりませんが、ADOにはリークがあり、すべてのメモリが徐々に消費されます。おおよそ同じ数のレコードの後に​​一貫してクラッシュが発生した場合は、調査することをお勧めします。

関連する問題