Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Doppelte Datensätze verhindern
Snowwolf3000
myCSharp.de - Member

Avatar #avatar-3109.jpg


Dabei seit:
Beiträge: 142
Herkunft: Süddeutschland

Themenstarter:

Doppelte Datensätze verhindern

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Golo Roden
myCSharp.de - Member

Avatar #avatar-2167.png


Dabei seit:
Beiträge: 4649
Herkunft: Riegel am Kaiserstuhl

beantworten | zitieren | melden

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

www.goloroden.de
www.des-eisbaeren-blog.de
private Nachricht | Beiträge des Benutzers
Snowwolf3000
myCSharp.de - Member

Avatar #avatar-3109.jpg


Dabei seit:
Beiträge: 142
Herkunft: Süddeutschland

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers