Hallo Leute,
######## Thread Status bei Eröffnung #######
per OleDbDataAdapter, lade ich mir alle vorhandenen Datensätze einer Tabelle in eine
DataTable.
Das Funktioniert wunderbar.
Nun möchte ich neue Datensätze hinzufügen können.
Das Funktioniert gar nicht wunderbar.
Spoiler anzeigen
Mein bisheriger Ansatz dafür:
Infos zum Code
Spoiler anzeigen
MdB_DT werden bei der Erstellung gleich die Columns zugewiesen.
list, wird vorher gefüllt und dann übergeben.
Die Connection conn wird erstellt und es wird probiert,
diese zu öffnen, falls es klappt, wird conn übergeben.
Mit dem obigen Code, macht er gar nichts.
Er wirft weder einen Fehler, noch fügt er einen neuen Datensatz ein.
Habt ihr einen Vorschlag für mich, mit dem es funktioniert?
Soll ich es nur mit OleDbCommand machen, falls ja, wie sieht dann ungf. der query dafür aus?
DataTable oder DataSet oder lieber doch was ganz anderes?
######## Thread Status jetzt #######
Hier der Code, welche OleDbCommand nutz zum einfügen eines Datensatzes:
Spoiler anzeigen
######## Thread Status bei Eröffnung #######
per OleDbDataAdapter, lade ich mir alle vorhandenen Datensätze einer Tabelle in eine
DataTable.
Das Funktioniert wunderbar.
Nun möchte ich neue Datensätze hinzufügen können.
Das Funktioniert gar nicht wunderbar.
Mein bisheriger Ansatz dafür:
C#-Quellcode
- // TODO:: Add new DataSets to DataBase
- private static void DataToDataBase(OleDbConnection conn, List<string> list)
- {
- DataTable dt = mdb_DT();
- DataRow row = dt.NewRow();
- row.ItemArray = list.ToArray();
- dt.Rows.Add(row);
- dt.AcceptChanges();
- string tabName = "Main_Tab";
- string query = "SELECT * FROM [Main_Tab]";
- OleDbDataAdapter detailAdapter = new OleDbDataAdapter(query, conn);
- OleDbCommandBuilder cb = new OleDbCommandBuilder(detailAdapter);
- cb.GetDeleteCommand();
- cb.GetInsertCommand();
- cb.GetUpdateCommand();
- if (detailAdapter != null)
- {
- detailAdapter.Update(dt);
- // detailAdapter.Dispose();
- }
- }
Infos zum Code
MdB_DT werden bei der Erstellung gleich die Columns zugewiesen.
list, wird vorher gefüllt und dann übergeben.
Die Connection conn wird erstellt und es wird probiert,
diese zu öffnen, falls es klappt, wird conn übergeben.
Mit dem obigen Code, macht er gar nichts.
Er wirft weder einen Fehler, noch fügt er einen neuen Datensatz ein.
Habt ihr einen Vorschlag für mich, mit dem es funktioniert?
Soll ich es nur mit OleDbCommand machen, falls ja, wie sieht dann ungf. der query dafür aus?
DataTable oder DataSet oder lieber doch was ganz anderes?
######## Thread Status jetzt #######
Hier der Code, welche OleDbCommand nutz zum einfügen eines Datensatzes:
C#-Quellcode
- #region Data_to_DataBase
- // Create query command with DataTable Columnnames
- // as Columnnames and list as Values to add
- private static string InsertQuery(List<string> list)
- {
- DataTable _dt = mdb_DT();
- _dt.AcceptChanges();
- string s = "INSERT INTO Main_Tab(";
- for (int i = 0; i < list.Count; i++)
- {
- if (i != list.Count - 1) { s += _dt.Columns[i].ColumnName.ToString() + ","; } else { s += _dt.Columns[i].ColumnName.ToString() + ")VALUES('"; ; }
- }
- for (int i = 0; i < list.Count; i++)
- {
- if (i != list.Count - 1) { s += list[i] + "','"; } else { s += list[i] + "')"; }
- }
- _dt.Clear(); _dt.AcceptChanges();
- return s;
- }
- // Adds a List of Data to the DataBase
- private static bool DataToDataBase(OleDbConnection conn, List<string> list)
- {
- bool success = false;
- try
- {
- conn.Open();
- OleDbCommand cmd = new OleDbCommand(InsertQuery(list), conn);
- cmd.ExecuteNonQuery();
- success = true;
- System.Windows.Forms.MessageBox.Show("New Dataset was added");
- }
- catch (Exception ex)
- {
- System.Windows.Forms.MessageBox.Show("An Error occured while saving the Dataset\n\n" + ex.Message.ToString());
- }
- return success;
- }
- #endregion
- // Opens DataBase
- private static OleDbConnection ConnectToAcces()
- {
- OleDbConnection conn = new OleDbConnection();
- conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
- @"Data source= C:\Users\#####\Documents\test.mdb";
- try
- {
- conn.Open();
- conn.Close();
- }
- catch (Exception ex)
- {
- System.Windows.Forms.MessageBox.Show("Fehler bei verbindung mit Datenbank\n" + ex.ToString());
- }
- return conn;
- }
- public static bool UpdateDataBase(List<string> list)
- {
- // try to open mdb, and then add the List Data
- bool success = false;
- if (DataToDataBase(ConnectToAcces(), list)) { success = true; }
- EraseTable();
- return success;
- }
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Petersilie“ () aus folgendem Grund: Lösung hinzugefügt, Thread als erledigt markiert, Vorschläge u. Verbesserungen gerne gesehen.