1

リンク サーバーを使用して AS/400 のレコードを更新しています。接続を適切に閉じていません。AS/400 側では、まだ多数の接続がアイドル状態になっています。SQL ログには次のように表示されます。

EXCEPTION_ACCESS_VIOLATION 書き込みアドレス 0000000000000024 at 0x0000000077BDE4B4

接続を開いて AS/400 側のファイルを更新するたびにそうであるとは限りません。222 のレコードを更新しましたが、まだ 210 の接続が開いていました。222個あると思います。

.NET アプリからストアド プロシージャを呼び出しています。実行しているストアド プロシージャでは、次のようになります。

EXECUTE (@as400Query) at S100405D

as400Query は update ステートメントを含む文字列で、S100405D はリンク サーバーです。レコードは AS/400 で更新されているため、問題にはなりません。接続を閉じようとすると、エラーが発生するようです。また、リンクサーバーの設定と接続タイムアウト= 0(オフ)を確認しました。タイムアウトを設定するとそれらが閉じられるかどうか、またはとにかくエラーがスローされるため問題にならないかどうかはわかりません。

どんな助けでも大歓迎です!

ブライアン

4

2 に答える 2

1

AS側で接続を閉じるために何らかのコードを送信していますか? SQL サーバーはその接続を閉じるだけで、他の RDBMS で開かれた他の接続は SQL によって管理されません。

于 2012-10-12T14:25:14.097 に答える
0

IBM iプログラマーとして、ストアード・プロシージャーの呼び出し中にエラーが発生することはないと思います。まれに、パラメータの不一致がある場合、OSが例外をスローします。最も一般的なのは、VARCHARを使用する呼び出し元(C#)と、それをCHARとして宣言するIBM側です。

それとは別に、IBMの担当者に、最新のPTFを使用していることを確認してもらいます。

スタイルの問題として、私は見ることを期待していません:

open connection
CALL proc
close connection

更新する行ごとに。むしろ、私は期待します

open connection
loop
  CALL proc
end loop
close connection
于 2012-10-12T15:02:17.707 に答える