Neuen Datensatz in Access einfügen

  • C#

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Neuen Datensatz in Access einfügen

    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:

    C#-Quellcode

    1. // TODO:: Add new DataSets to DataBase
    2. private static void DataToDataBase(OleDbConnection conn, List<string> list)
    3. {
    4. DataTable dt = mdb_DT();
    5. DataRow row = dt.NewRow();
    6. row.ItemArray = list.ToArray();
    7. dt.Rows.Add(row);
    8. dt.AcceptChanges();
    9. string tabName = "Main_Tab";
    10. string query = "SELECT * FROM [Main_Tab]";
    11. OleDbDataAdapter detailAdapter = new OleDbDataAdapter(query, conn);
    12. OleDbCommandBuilder cb = new OleDbCommandBuilder(detailAdapter);
    13. cb.GetDeleteCommand();
    14. cb.GetInsertCommand();
    15. cb.GetUpdateCommand();
    16. if (detailAdapter != null)
    17. {
    18. detailAdapter.Update(dt);
    19. // detailAdapter.Dispose();
    20. }
    21. }



    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

    C#-Quellcode

    1. #region Data_to_DataBase
    2. // Create query command with DataTable Columnnames
    3. // as Columnnames and list as Values to add
    4. private static string InsertQuery(List<string> list)
    5. {
    6. DataTable _dt = mdb_DT();
    7. _dt.AcceptChanges();
    8. string s = "INSERT INTO Main_Tab(";
    9. for (int i = 0; i < list.Count; i++)
    10. {
    11. if (i != list.Count - 1) { s += _dt.Columns[i].ColumnName.ToString() + ","; } else { s += _dt.Columns[i].ColumnName.ToString() + ")VALUES('"; ; }
    12. }
    13. for (int i = 0; i < list.Count; i++)
    14. {
    15. if (i != list.Count - 1) { s += list[i] + "','"; } else { s += list[i] + "')"; }
    16. }
    17. _dt.Clear(); _dt.AcceptChanges();
    18. return s;
    19. }
    20. // Adds a List of Data to the DataBase
    21. private static bool DataToDataBase(OleDbConnection conn, List<string> list)
    22. {
    23. bool success = false;
    24. try
    25. {
    26. conn.Open();
    27. OleDbCommand cmd = new OleDbCommand(InsertQuery(list), conn);
    28. cmd.ExecuteNonQuery();
    29. success = true;
    30. System.Windows.Forms.MessageBox.Show("New Dataset was added");
    31. }
    32. catch (Exception ex)
    33. {
    34. System.Windows.Forms.MessageBox.Show("An Error occured while saving the Dataset\n\n" + ex.Message.ToString());
    35. }
    36. return success;
    37. }
    38. #endregion
    39. // Opens DataBase
    40. private static OleDbConnection ConnectToAcces()
    41. {
    42. OleDbConnection conn = new OleDbConnection();
    43. conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
    44. @"Data source= C:\Users\#####\Documents\test.mdb";
    45. try
    46. {
    47. conn.Open();
    48. conn.Close();
    49. }
    50. catch (Exception ex)
    51. {
    52. System.Windows.Forms.MessageBox.Show("Fehler bei verbindung mit Datenbank\n" + ex.ToString());
    53. }
    54. return conn;
    55. }
    56. public static bool UpdateDataBase(List<string> list)
    57. {
    58. // try to open mdb, and then add the List Data
    59. bool success = false;
    60. if (DataToDataBase(ConnectToAcces(), list)) { success = true; }
    61. EraseTable();
    62. return success;
    63. }

    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.