2016-04-13 28 views
0

現在、以下のように(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つずつコミットする)。第二に、前者の選択は機能シーケンスエラーを解決するだろうか?

+1

"それ以外のものは動作しないビットを除いて動作しますが、それはアップデートによって修正されますが、そうでないビットを除いてすべて動作するので更新したくありません" - 引数?それは何が起こっているかについての奇妙な考え方のようです。古いコードに問題があります(CSDK 3.50以降を使用していない場合は、CSDK 3.50が10年前から使用されているため、古い*が使用されています)、アップグレードが適切です。 CSDK 4.10は最新です。 CSDK 3.70も存在します。 –

+0

入力いただきありがとうございます。私は、コードの機能全体が完全に機能しているにもかかわらず、なぜそれがエラーを投げているのかを単に尋ねているだけです。それはちょうど私に意味をなさない。また、行ごとにではなく、バルクトランザクションとしてdatareaderの外にトランザクションを持つ方が良いかどうか疑問に思っていました。 – misosouper

答えて

0

コード内には、データレアダーがあり、その中にはいくつかの更新ステートメントがありました。これらの機能を分離してコードの構造を変更しました。まず、すべてのデータを読み込み、オブジェクトに格納します。その後、それが完了して閉じた後、各オブジェクトを反復しながら更新ステートメントを実行しました。それは、起こっていた関数シーケンスエラーを解決するように思えた。

0

アプリケーションを64ビットアーキテクチャまたは.NET FW 4x の対象にする場合は、CSDK 4.10 xC2以上を使用することを検討してください。

関連する問題