2016-04-13 9 views
0

Derzeit meine Code-Struktur (in VB.NET) ist wie folgt -SQL-Transaktion in DataReader oder außerhalb davon? Und Funktionsfolgenfehler?

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 

Der Leser mehrere Datensätze liest und für jeden Datensatz gibt es mehrere Update-Anweisungen ausgeführt werden. Ich denke, es wäre besser, für jeden Datensatz eine Transaktion zu beginnen, und nach dem Commit geht es weiter zum nächsten Datensatz und erstelle eine neue Transaktion dafür "spülen und wiederholen".

Alles funktioniert gut und wird in die Datenbank übernommen, aber wenn die Leser prüfen, ob weitere Zeilen nach dem letzten Datensatz, diese eigentümlichen Fehler oben zeigen -

ERROR [HY010][Informix .NET provider] Function sequence error. 

Nach einigen reasearch tun, die Website IBM sagt, dass Ich müsste auf eine CSDK 3.5 oder höher (http://www-01.ibm.com/support/docview.wss?uid=swg1IC58696) aktualisieren. Für mich scheint dies jedoch ein wenig unnötig, da der Code gut funktioniert und am Ende nur einen Fehler verursacht.

Wäre es besser, die Transaktion AUSSERHALB des Lesers zu haben und alle Datensätze in der Tabelle durchzugehen und DANN alle auf einmal zu begehen? Oder ist es das effizienteste/optimalste, was es jetzt ist (mit anderen Worten, jeden Datensatz mit allen notwendigen Aktualisierungsanweisungen für diesen Datensatz durchzugehen und einzeln zu übernehmen)? Zweitens, würde die erstgenannte Wahl den Funktionssequenzfehler auflösen?

+1

"Es funktioniert alles außer dem Bit, das nicht, und das würde durch ein Update behoben werden, aber ich möchte nicht aktualisieren, weil es alles funktioniert außer für das Bit, das nicht" - ist das Ihr Streit? Es scheint eine seltsame Art zu denken, was vor sich geht. Es gibt ein Problem mit dem alten Code (wenn Sie nicht CSDK 3.50 oder neuer verwenden, verwenden Sie * alt *, da CSDK 3.50 für ein Jahrzehnt alt ist), dann ist ein Upgrade angemessen. CSDK 4.10 ist aktuell; CSDK 3.70 existiert ebenfalls. –

+0

Danke für Ihre Eingabe. Ich frage nur, warum es einen Fehler geben würde, obwohl die gesamte Funktionalität des Codes perfekt funktioniert. Es ergab für mich keinen Sinn. Ich fragte mich auch, ob es besser wäre, die Transaktion außerhalb des Datenreaders als Massentransaktion anstatt Zeile für Zeile durchzuführen. – misosouper

Antwort

0

Innerhalb des Codes gab es einen Datenreader, und innerhalb des Datenreaders waren einige Update-Anweisungen. Ich habe die Struktur des Codes geändert, indem ich diese Funktionen getrennt habe. Zuerst lese ich alle Daten und speichere sie dann in Objekten. Dann, nachdem das getan und geschlossen wurde, habe ich die Update-Anweisungen ausgeführt, während ich durch jedes Objekt iteriert habe. Das schien den aufgetretenen Funktionsablauffehler zu lösen.

0

Wenn Sie planen, dass Ihre Anwendung auf 64-Bit-Architektur oder .NET FW 4x zielt, dann sollten Sie CSDK 4.10 xC2 oder höher verwenden.