-
Das ist schon seltsam.
Wie ist dein IsolationLevel?
Ggf. prüfe in den Verbindungseigenschaften den Commit-Level. Der muss dann auf 0 (ohne Journal) stehen.
Gegen die statische Connection ist nicht unbedingt etwas einzuwenden.
-
Ich bin wirklich dankbar für Ihre Bemühung.
Die Verbindung läuft nicht über ODBC sondern über ADO. Dabei ist mir keine Möglichkeit für den Commit-Level bekannt. Meine Connection sieht so aus:
public static iDB2Connection myAS400 = new iDB2Connection();
static DB2 myDB2 = new DB2();
myAS400.ConnectionString = "Datasource=AS400; default collection=AM; Pooling=false";
myAS400.Open();
while (myMSSQLReader.Read())
{
string insertString = string.Concat("insert into FEKALES1(SKABT, ...) values(@p1, ...)");
this.myCommand = myAS400.CreateCommand();
this.myCommand.CommandText = insertString;
this.myCommand.Parameters.AddWithValue("@p1", myMSSQLReader["Cod"].ToString());
...
myCommand.ExecuteNonQuery();
}
-
Da du keine Transaktion startest, wird Autocommit angenommen.
Dein Fehler steckt ggf. in der Schleife!
Ein Kommando benötigst du nicht je Datensatz.
Ggf. ist hier die interne Grenze, dass eine Connection nur max. 32k Command-Objekte aufnehmen kann.
Dies macht aber so keinen Sinn.
Erstelle das Command-Object vor der Schleife und füge die Parameter per Add(Name, Type) an.
in der Schleife kannst du dann die Werte per "mycommand.Parameters(Name).Value = Wert" zuweisen.
Nach der Schleife machst du dann einen myCommand.Dispose().
Bedenke, ein Command-Objekt verweist auf die Connection und umgekehrt. Hier hast du dann deinen Konflikt, da der Garbagecollector das nicht auflösen kannst bis das Connection-Objekt zerstört wird.
Für alle ADO-Objekte musst du Dispose() anwenden oder mittel "Using" klammern.
-
Hochgeehrter Herr Fürchau,
Volltreffer sag ich! Kurz nach dem Absenden meiner Programmbeschreibung kam mir der gleiche Gedanke. Mit der heißen Nadel umgestrickt, und die Daten kommen nun komplett in einer nie gekannten Geschwindigkeit.
Besten Dank, eine frohe Weihnacht und bleiben Sie der treuen AS400-Gemeinde auch im neuen Jahr erhalten.
-
Die Geschwindigkeit liegt in der einmaligen Interpretation des Commands mit der anschließend beliebig häufigen Ausführung begründet.
Machst du jedes mal ein neues Command-Objekt, muss die AS/400 jedes mal die Syntax prüfen sowie die Tabelle und Felder ermitteln und checken sowie das Kommando vorbereiten (Preparen) bevor es zur Ausführung kommt.
Es reicht, diesen Vorgang genau 1 Mal zu machen, so dass die nachfolgenden Ausführungen eben beschleunigt werden.
Dies gilt i.Ü. grundsätzlich für jeden SQL-Befehl.
Übrigens, bei deiner Methodik reicht es, eine lokale Variable innerhalb der Prozedur zu verwenden.
Zusätzliche solltest du "Using" verwenden und in einen Try/Catch einbetten.
Using hat den Vorteil, dass das Objekt auch im Fehlerfall (catch) oder bei return automatisch zerstürt wird, da die Dispose-Methode aufgerufen wird.
http://msdn.microsoft.com/de-de/library/yh598w02.aspx
Aber ich denke, du hast hier zur Vereinfachung diese Code-Teile nur ausgeblendet.
-
Nochmal zum Abschluss dieses Themas: Die hier erhaltene Unterstützung kann man sich nur wünschen.
Das Programm ist natürlich deutlich umfangreicher als hier auszugsweise gepostet. Try und catch war klar. Die elegante Methode Using war neu für mich. So erhielt ich nicht nur eine Lösung für mein Problem, sondern auch eine echte Verbesserung.
Das Lesen von Büchern ist natürlich Voraussetzung. Die echte Lernphase beginnt allerdings erst in der Praxis. Besten Dank und eine gesegnete Weihnacht...
Similar Threads
-
By heg in forum NEWSboard Programmierung
Antworten: 10
Letzter Beitrag: 10-10-14, 15:13
-
By KingofKning in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 10-10-14, 08:13
-
By msost in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 07-10-14, 13:15
-
By Robi in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 21-03-03, 09:16
Tags for this Thread
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks