Benutzer mit den meisten Antworten
VC++ Kann nicht beliebig DataTable Zeilen/Spalten über ODBC in ein DB2 eintragen ?

Frage
-
Hallo,
mit dieser Code kann ich nicht mehr als 2283 Zeilen mit 14 Spalten einfügen warum ?
for (int z=0; z<dt3->Rows->Count-1; z++)
for (int s=0; s<dt3->Columns->Count; s++)
cmd = INSERT INTO tabelle ("+sInsertSpaltenSQL+") VALUES ("+sInsertInhaltSQL+")";
oda = gcnew OdbcDataAdapter(cmd, conn);oda->Fill(dt3);
oder liegt an gcnew new
"oda = new OdbcdataAdapter(cmd, conn)" ?
MFG
- Bearbeitet ati.sah Montag, 16. April 2012 14:33
Antworten
-
Hi ati.sah,
nein, gcnew ist für ein managed Object schon das richtige.
Hat es einen speziellen Grund, dass du den (hier überflüssigen) Weg über einen DataAdapter gehst?
Warum verwendest du nicht einfach die Methoden des Command-Objektes? (http://msdn.microsoft.com/de-de/library/system.data.odbc.odbccommand.aspx)
Für dich sollte die Methode ExecuteNonQuery die richtige sein:DbCommand cmd = myOdbcConnection->CreateCommand(); cmd->CommandText = "INSERT INTO tabelle ("+sInsertSpaltenSQL+") VALUES ("+sInsertInhaltSQL+")"; cmd->ExecuteNonQuery(); cmd->Dispose();
Beachte dabei bitte noch folgendes:
Deine Objekte (Datenbankconnection, Commandobjekte etc.), sollte nach dem Gebraucht mittels Dispose entsorgt werden.
Wenn sich dein SQL aus Eingaben von außen zusammensetzt, solltest du die Parameter nicht nur hart in den String kopieren, sondern mit Parameterobjekten arbeiten, die einiges mehr an Sicherheit bringen. (Stichwort: SQL Injection).
Ich hoffe ich konnte dir weiterhelfen... :-)Viele Grüße Holger M. Rößler ---------------------------------------------------------- Kaum macht man es richtig, schon funktioniert es
- Als Antwort vorgeschlagen Martin RichterModerator Sonntag, 6. Mai 2012 09:05
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 10. Mai 2012 11:56
Alle Antworten
-
Hi ati.sah,
nein, gcnew ist für ein managed Object schon das richtige.
Hat es einen speziellen Grund, dass du den (hier überflüssigen) Weg über einen DataAdapter gehst?
Warum verwendest du nicht einfach die Methoden des Command-Objektes? (http://msdn.microsoft.com/de-de/library/system.data.odbc.odbccommand.aspx)
Für dich sollte die Methode ExecuteNonQuery die richtige sein:DbCommand cmd = myOdbcConnection->CreateCommand(); cmd->CommandText = "INSERT INTO tabelle ("+sInsertSpaltenSQL+") VALUES ("+sInsertInhaltSQL+")"; cmd->ExecuteNonQuery(); cmd->Dispose();
Beachte dabei bitte noch folgendes:
Deine Objekte (Datenbankconnection, Commandobjekte etc.), sollte nach dem Gebraucht mittels Dispose entsorgt werden.
Wenn sich dein SQL aus Eingaben von außen zusammensetzt, solltest du die Parameter nicht nur hart in den String kopieren, sondern mit Parameterobjekten arbeiten, die einiges mehr an Sicherheit bringen. (Stichwort: SQL Injection).
Ich hoffe ich konnte dir weiterhelfen... :-)Viele Grüße Holger M. Rößler ---------------------------------------------------------- Kaum macht man es richtig, schon funktioniert es
- Als Antwort vorgeschlagen Martin RichterModerator Sonntag, 6. Mai 2012 09:05
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 10. Mai 2012 11:56
-
Hallo ati.sah,
Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.