現在、以下のように(VB.NETで)私のコードの構造がある -DataReader内またはその外部のSQLトランザクション?機能シーケンスエラー?
Using reader As IfxDataReader = command.ExecuteReader()
If reader.HasRows Then
Do While reader.Read()
Using transaction As IfxTransaction = conn.BeginTransaction(System.Data.IsolationLevel.ReadCommitted)
'multiple update statements
transaction.Commit()
End Using
Loop
End If
End Using
読者は、複数のレコードを読んでいると、すべてのレコードに対して、実行される複数の更新文があります。私は、各レコードのトランザクションを開始し、完了後にコミットし、次のレコードに移動し、そのための新しいトランザクション「リンスとリピート」を作成する方がよいと判断します。
すべてが正常に動作し、データベースにコミットされていますが、最後のレコードの後に複数の行のためのリーダーのチェックは、この奇妙なエラーが現れたときに -
ERROR [HY010][Informix .NET provider] Function sequence error.
いくつかのreasearchを行った後、IBMのウェブサイトは、と言っています私はCSDK 3.5以上(http://www-01.ibm.com/support/docview.wss?uid=swg1IC58696)に更新する必要があります。しかし、私にとっては、コードが正常に動作しているので、少し不必要なようです。最後にエラーを投げているだけです。
読者の外にトランザクションを持ち、テーブル内のすべてのレコードを一度にコミットする方が良いでしょうか?または、今のところ最も効率的/最適な方法です(言い換えれば、各レコードに必要なすべての更新ステートメントを記録し、一度に1つずつコミットする)。第二に、前者の選択は機能シーケンスエラーを解決するだろうか?
"それ以外のものは動作しないビットを除いて動作しますが、それはアップデートによって修正されますが、そうでないビットを除いてすべて動作するので更新したくありません" - 引数?それは何が起こっているかについての奇妙な考え方のようです。古いコードに問題があります(CSDK 3.50以降を使用していない場合は、CSDK 3.50が10年前から使用されているため、古い*が使用されています)、アップグレードが適切です。 CSDK 4.10は最新です。 CSDK 3.70も存在します。 –
入力いただきありがとうございます。私は、コードの機能全体が完全に機能しているにもかかわらず、なぜそれがエラーを投げているのかを単に尋ねているだけです。それはちょうど私に意味をなさない。また、行ごとにではなく、バルクトランザクションとしてdatareaderの外にトランザクションを持つ方が良いかどうか疑問に思っていました。 – misosouper