Insert-Statement wird nicht in Accessdatenbank geschrieben

Sascha Wetzel

Grünschnabel
Hi @ all,

ich mach grade eine Application in C# mit einer Access 2003 Datenbank und OleDb.

Die selects funktionieren super die inserts und updates dafür garnicht :(

Hier der select code:
Code:
            sqlStatement = "SELECT * FROM Tabelle1";
            connectionString = new OleDbConnection(pathToDatabase);
            connectionString.Open();
            dataAdapter = new OleDbDataAdapter();
            dataAdapter.SelectCommand = connectionString.CreateCommand();
            dataAdapter.SelectCommand.CommandText = sqlStatement;
            connectionString.Close();

Und hier der insert (update ist so gut wie identisch) code:
Code:
            sqlStatement = ""INSERT INTO Ausbilder ( Name, Vorname, Geburtsdatum, Date1, Date2, Gliederung, Telefon, Mobil, Email, Strasse, Hausnummer, Plz, Ort ) VALUES ('" + txtNameGrid.Text + "','" + txtVornameGrid.Text + "','" + dateTimeGeburtstagGrid.Text.ToString() + "','" + dateTimeBGLehrscheinGrid.Text.ToString() + "','" + dateTimeDrkLehrscheinGrid.Text +"','" + txtGliederungGrid.Text + "','" + txtTelefonGrid.Text + "','" + txtMobilGrid.Text + "','" + txtEmailGrid.Text + "','" + txtStrasseGrid.Text + "','" + txtHausnummerGrid.Text + "','" + txtPlzGrid.Text + "','" + txtOrtGrid.Text + "');");
            connectionString = new OleDbConnection(pathToDatabase);
            connectionString.Open();
            dataAdapter = new OleDbDataAdapter();
            dataAdapter.InsertCommand = connectionString.CreateCommand();
            dataAdapter.InsertCommand.CommandText = sqlStatement;
            connectionString.Close();

Das SQL-Command wir aus der Variable sqlStatement gelesen, in der Datenbank passiert bei insert und update jedoch garnix.

Das SQL-Command ist auch richtig formuliert, da wenn ich es direkt in Access ausführ wird es in die Datenbank geschrieben.

Weiß einer von euch eine Lösung?
 

Sascha Wetzel

Grünschnabel

CPoly

Mitglied Weizenbier
Naja ich hab auch kein OleDbCommand...

C#:
connectionString.CreateCommand();

Ich hab eine dataAdapter der so viel ich weiß und gelesen haben eigentlich alles übernehmen sollte oder ist das nicht so?

Im Moment setzt du einfach nur die Eigenschaft "CommandText" auf einen String. Nirgendwo wird der Adapter angewiesen damit auch was anzustellen.

Siehe dazu: http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbdataadapter(v=VS.71).aspx
The OleDbDataAdapter provides this bridge by using [...] Update to send changes made in the DataSet back to the data source.

Siehe dazu den zweiten Link, den ich bei meiner ersten Antwort gepostet habe.

Außerdem http://msdn.microsoft.com/en-us/lib....oledbdataadapter.insertcommand(v=VS.71).aspx

An OleDbCommand used during Update to insert records in the data source that correspond to new rows in the DataSet.
 

Sascha Wetzel

Grünschnabel
D.h. ich brauche analog zu dataAdapter.Fill(dataTable); ein dataAdapter.Update(dataTable)****?

Weil daran bin ich schon gestern gescheitert. Da kommt eine InvalidOperationException und ich weiß nicht so wirklich warum, da ein Objekt vom Typ DataTable als Übergabeparameter akzeptiert wird.
 

michaelwengert

Erfahrenes Mitglied
Wenn du die Befehle direkt abschicken willst funktioniert es mit nem Command
hier mal ein beispiel. (zwar ODBC Komponenten...müsten aber ähnlich sein)
Code:
System.Data.Odbc.OdbcConnection odbcConnection1 = new System.Data.Odbc.OdbcConnection();

odbcConnection1.ConnectionString = "Driver={IBM......"

OdbcCommand odbcCommand1 = new OdbcCommand();
   
odbcCommand1.Connection = odbcConnection1;

odbcConnection1.Open();
odbcCommand1.CommandText = "INSERT .....";
odbcCommand1.ExecuteNonQuery();
odbcConnection1.Close();
 

Sascha Wetzel

Grünschnabel
Ah cool es tut :)

Ich habs jetzt zwar nochmal n bisschen anderes gelöst aber der Execute-Befehl hat immer gefehlt :)

Code:
connectionString = new OleDbConnection(pathToDatabase);
connectionString.Open();
dataAdapter = new OleDbDataAdapter();
dataAdapter.InsertCommand = connectionString.CreateCommand();
dataAdapter.InsertCommand.CommandText = sqlStatement;
dataAdapter.InsertCommand.ExecuteNonQuery();
connectionString.Close();

Vielen Dank!