2017-12-13 50 views
0

SQLExecDirect経由でストアドプロシージャを呼び出すC++アプリケーションがあります。デッドロックがある場合、デッドロックが解決されるまでSQLExecDirectは戻りません。デッドロック時にSQLExecDirectが返されない

私はデッドロックを検出して例外をスローすることができます。デッドロックしている間にC++/ODBCが制御を取り戻す方法はありますか?私は答えがノーだと思っていますが、まだ見つけられていないODBC機能がほしいと思っています。

私が考えることのできる唯一の解決策は、別のスレッドを実行して戻すスレッドのタイムアウトを設定することです。

いいえ、私はデッドロックを修正できません。このアプリは、私の顧客のDBから選択したクエリやストアドプロシージャを実行しています。私はデッドロックの期間中、応答しないようにしたくない。

答えて

1

ODBCプロバイダが非同期実行をサポートしていれば、ODBC 3.8+では、以前の3.0のポーリング専用のイベントベースの通知モードもサポートしています。 SQLServerのMARSのようなものを使用しない限り、接続は依然としてデッドロックされますが、スレッドは答えを待つ間に何か他のことを行うことができます。

+0

ありがとうございました。だからあなたはドライバのバージョンを確認すると言っているし、> 3.8私は私のアプリをより敏感にすることができますが、それ以外の場合、私は待って立ち往生ですか? MS SQL Management Studioでデッドロックを作成すると、「トランザクション(プロセスID n)が別のプロセスでロックリソースにデッドロックされ、デッドロックの対象として選択されました」という応答が返されます。 ODBCがそれを利用する方法をいくつか持っていたと思っていました。 – GBrookman

関連する問題