Hallo,
ich wollte ein Programm schreiben, welches die in einen Verzeichnis gespeicherten Albennamen(einfach nur die Unterordnernamen) in eine Datenbank schreibt. Mein Problem ist wenn man das Verzeichnis mehrmals einliest, dass er die Alben doppelt in die Datenbank schreibt. Das Programm sollte also erstmal das Dataset durchsuchen ob der Albumname schon vorhanden ist und nur wenn nicht soll er es reinschreiben. Und das bekomm ich nicht hin. Wäre dankbar wenn ihr mir da etwas helfen könntet
(hab die Funktion zum durchsuchen des Ordners noch nicht implemntiert, weshalb erstmal ein String als Albumname herhalten muss)
string SelectCommandString = "SELECT * FROM album";
OleDbDataAdapter adapter = new OleDbDataAdapter(SelectCommandString,con);
DataSet ds = new DataSet();
//alle schon vorhandeneAlbumeinträge aus der DB holen
adapter.Fill(ds,"Album");
string insertCommandString = "INSERT INTO Album(Name,GenreNr) VALUES (@Name,@GenreNr)";
OleDbCommand insertCommand = new OleDbCommand();
insertCommand.CommandText = insertCommandString;
insertCommand.Connection = con;
insertCommand.Parameters.Add(new OleDbParameter("@Name",OleDbType.VarChar,100,"Name"));
insertCommand.Parameters.Add(new OleDbParameter("@GenreNr",OleDbType.Integer,4,"GenreNr"));
adapter.InsertCommand = insertCommand;
//Neue DataRow erzeugen
DataRow neueReihe = ds.Tables["Album"].NewRow();
neueReihe["Name"] = "The Hives - Tyrannosaurus Hives";
neueReihe["GenreNr"] = 1;
ds.Tables["Album"].Rows.Add(neueReihe);
adapter.Update(ds,"Album");
Gruß,
Snowwolf
Hallo,
nach dem Ansatz, eine Funktionalität so weit unten wie möglich zu realisieren, hat dieses Problem meiner Meinung nach nichts in der Anwendungslogik verloren, sondern gehört in die Datenbank.
Hier definierst Du eine oder mehrere Spalten (beispielsweise den Titel des Albums verknüpft mit dem Namen des Künstlers) als UNIQUE, und schon schlägt das INSERT fehl 🙂. Dann musst Du in Deinem Programm nur noch die geworfene Exception richtig abfangen, und alles ist in Butter 🙂.
Viele Grüße,
Golo
Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden
Danke!
Der Ansatz das in die Datenbank zu verschieben ist wirklich viel besser. Habs gerade ausprobiert und funktoniert nun so wie ichs mir vorgestellt habe.