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?
"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. –
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