Ich habe eine Datentabelle mit 5 Spalten, (Song, Interpret, Album, Genre, Zeit) die Tabelle ermöglicht mir so viele Zeilen wie ich eine Playlist erstellen möchten Wenn der Benutzer es für richtig hält, kann er auf die Schaltfläche klicken und die Daten für den Zugriff exportieren. Meine Access-Datenbank hat eine Tabelle namens "Playlist" mit den gleichen 5 Spalten wie die Datentabelle. Wenn ich versuche, die Daten zu übertragen, bekomme ich den Ausnahmefehler für die Insert INTO-Anweisung und ich habe keine Ahnung, warum, weil ich einen commandBuilder benutze. Ich habe meine Klasse und Methode angehängt, die diese Aktion durchführt.Einfügen INTO-Fehler beim Übertragen von Daten von DataTable auf Access-Datenbank
Bitte beraten!
public void ExportPlaylistToAccess(DataTable playlist)
{
// open connection to the database pathed to
String connection = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
@"Data source= D:\CIS 465\Final Project\VirtualiPod\iTunesPlaylistDatabase.accdb";
using (OleDbConnection con = new OleDbConnection(connection))
{
var adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand("SELECT * from [Playlist]", con);
var cbr = new OleDbCommandBuilder(adapter);
cbr.GetDeleteCommand();
cbr.GetInsertCommand();
cbr.GetUpdateCommand();
try
{
con.Open();
adapter.Update(playlist);
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Message, "Database Error");
}
catch (Exception x)
{
MessageBox.Show(x.Message, "Exception Error");
}
}
Datatable Schöpfung
private void createPlaylist_Click(object sender, EventArgs e)
{
if (playlist.Rows.Count == 0)
{
playlist.Columns.Add("Song");
playlist.Columns.Add("Artist");
playlist.Columns.Add("Album");
playlist.Columns.Add("Genre");
playlist.Columns.Add("Time");
dataGridView1.DataSource = playlist;
}
else if (playlist.Rows.Count > 0)
{
MessageBox.Show("Please clear your current playlist to create a new one.");
}
}
// adds song to playlist for user upon click
private void addToPlaylist_Click(object sender, EventArgs e)
{
IITTrackCollection tracks = app.LibraryPlaylist.Tracks;
IITTrack currentTrack = app.CurrentTrack;
DataRow newRow;
newRow = playlist.NewRow();
newRow["Song"] = currentTrack.Name;
newRow["Artist"] = currentTrack.Artist;
newRow["Album"] = currentTrack.Album;
newRow["Genre"] = currentTrack.Genre;
newRow["Time"] = currentTrack.Time;
playlist.Rows.Add(newRow);
dataGridView1.DataSource = playlist;
}
Wie wurde die Datentabelle erstellt? Wenn Sie nur einen im Code erstellt haben, weiß der Adapter nicht, wie er die Daten in der Datenbank speichern soll, obwohl Sie dieselben Namen verwendet haben. – Plutonix
Ich habe meinen ursprünglichen Post bearbeitet, in dem meine dataTable erstellt wird. – Imperiale
Die DataTable muss aus der Zieltabelle erstellt werden. Verwenden Sie Ihre SELECT-Abfrage dafür. Und machen Sie das DataAdapter zu einem Formular/Klasse-Level-Objekt, so dass es die Smart für INSERT, DELETE und UPDATE behält. [Beispiel] (http://stackoverflow.com/a/33702351/1070452) – Plutonix