Zitat von
fly_singapore:
Delphi-Quellcode:
connect.Open ;
da := OleDBDataAdapter.Create;
insCMD := OleDBCommand.create(cSQL, connect);
da.InsertCommand := insCMD;
// hier fehlt die Ausführung des Command
connect.Close;
Hauptfehler: Es fehlt die Anweisung, dass der
DbCommand überhaupt
auszuführen ist. Beim Ausführen über den DbDataAdapter ist dazu
DbDataAdapter.Update() vorgesehen; aber es geht auch direkt (ohne da) über
insCMD.ExecuteNonQuery().
Zusätzliche Gesichtspunkte: Für den MS-
SQL Server sind die
Sql-Klassen vorgesehen (nicht OleDb). Der
DbDataAdapter öffnet und schließt die Verbindung automatisch; auf connect.Open/Close kann meistens verzichtet werden. Der
DbCommand-String soll niemals (NIEMALS!) als langer String erstellt werden, sondern die Werte sind per
DbParameter hinzuzufügen:
Delphi-Quellcode:
cSQL := 'INSERT INTO testtabelle (Name) VALUES (?)';
insCMD := OleDBCommand.create(cSQL, connect);
insCMD.Parameters.Add('Vorname', SqlDbType.String).Value = 'Peter';
Wie die Parameter im Befehlstext einzutragen sind, weiß ich nicht, das ist bei jedem DbProvider anders: mit oder ohne Parameter-Bezeichnung, mit '?' oder '@' oder ':' usw. Aber das hat nur
Vorteile: Der DbProvider steuert QuotedStr selbst, regelt notwendige Konvertierungen und vermeidet überflüssige, und
SQL-Injection wird verhindert.
Gruß Jürgen