Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Datensatz aus Datenbank löschen


Orothred - Mo 01.10.07 08:36
Titel: Datensatz aus Datenbank löschen
Hi. Mit folgendem Code suche ich nach datensätzen in meiner datenbank und möchte sie bearbeiten und aktualisieren:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
// Änderungen ins Array speichern

         strArray[lstSuchergebnisse.SelectedIndex, 0] = txtName.Text;
         strArray[lstSuchergebnisse.SelectedIndex, 1] = txtVorname.Text ;
         strArray[lstSuchergebnisse.SelectedIndex, 2] = txtStrasse.Text;
         strArray[lstSuchergebnisse.SelectedIndex, 3] = txtOrt.Text;
         strArray[lstSuchergebnisse.SelectedIndex, 4] = txtPLZ.Text;
         strArray[lstSuchergebnisse.SelectedIndex, 5] = txtTelefon.Text;
         strArray[lstSuchergebnisse.SelectedIndex, 6] = txtemail.Text;
         strArray[lstSuchergebnisse.SelectedIndex, 7] = txtGeburtstag.Text;

         // Variable für den SQL-Befehl
         string strSQL = "";

         try
         {
            // Connection zur Datenbank aufbauen
            OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Adressen.mdb");

            con.Open();

            strSQL = "INSERT INTO Adressen(Name, Vorname, Straße, Ort, PLZ, Telefon, Email, Geburtstag) VALUES (@Name, @Vorname, @Straße, @Ort, @PLZ, @Telefon, @Email, @Geburtstag)";

            // DataSet und Command erzeugen
            DataSet ds = new DataSet();
            OleDbCommand cmd = new OleDbCommand(strSQL, con);

            // Definieren der Parameter
            cmd.Parameters.Add("@Name", OleDbType.Variant, 50);
            cmd.Parameters.Add("@Vorname", OleDbType.Variant, 50);
            cmd.Parameters.Add("@Strasse", OleDbType.Variant, 50);
            cmd.Parameters.Add("@Ort", OleDbType.Variant, 50);
            cmd.Parameters.Add("@PLZ", OleDbType.Variant, 5);
            cmd.Parameters.Add("@Telefon", OleDbType.Variant, 20);
            cmd.Parameters.Add("@Email", OleDbType.Variant, 50);
            cmd.Parameters.Add("@Geburtstag", OleDbType.Variant, 8);

            cmd.Parameters["@Name"].Value = strArray[lstSuchergebnisse.SelectedIndex, 0];
            cmd.Parameters["@Vorname"].Value = strArray[lstSuchergebnisse.SelectedIndex, 1];
            cmd.Parameters["@Strasse"].Value = strArray[lstSuchergebnisse.SelectedIndex, 2];
            cmd.Parameters["@Ort"].Value = strArray[lstSuchergebnisse.SelectedIndex, 3];
            cmd.Parameters["@PLZ"].Value = strArray[lstSuchergebnisse.SelectedIndex, 4];
            cmd.Parameters["@Telefon"].Value = strArray[lstSuchergebnisse.SelectedIndex, 5];
            cmd.Parameters["@Email"].Value = strArray[lstSuchergebnisse.SelectedIndex, 6];
            cmd.Parameters["@Geburtstag"].Value = strArray[lstSuchergebnisse.SelectedIndex, 7];



            // DataAdapter erzeugen, Kommando übergeben, Fill ausführen 
            OleDbDataAdapter da = new OleDbDataAdapter();
            da.SelectCommand = cmd;
            da.Fill(ds);
         }

         // Fehlerbehandlungsmethode
         catch (Exception ex)
         {
            MessageBox.Show(ex.Message);
         }


damit füge ich allerdings nur einen neuen datensatz in die datenbank ein, der alte, der eigentlich aktualisiert werden soll, bleibt erhalten. wie bekomme ich es hin, das der neue datensatz eingefügt und der alte gelöscht wird?

Moderiert von user profile iconGausi: Code- durch C#-Tags ersetzt


JüTho - Mo 01.10.07 10:03

Hast Du Dich schon einmal grundlegend mit PrimaryKeys und SQL-Befehlen beschäftigt? In Deinem Code sehe ich nicht, dass Du eine ID o.ä. verwendest.

Dein Code passt auch überhaupt nicht zur Fragestellung:


Worüber wunderst Du Dich also? Jürgen


Orothred - Mo 01.10.07 10:13

die id ist in der datenbank vorhanden. indem ich diese mit in den code einbezogen habe, hat alles so funktioniert, wie ich es haben wollte.

deine bedenken kann ich deshalb nicht nachvollziehen, da jetzt alles funktioniert, mit dem code, der da steht


JüTho - Mo 01.10.07 10:29

user profile iconOrothred hat folgendes geschrieben:
die id ist in der datenbank vorhanden. indem ich diese mit in den code einbezogen habe, hat alles so funktioniert, wie ich es haben wollte.

deine bedenken kann ich deshalb nicht nachvollziehen, da jetzt alles funktioniert, mit dem code, der da steht

Dann mache ich meine Zweifel mal konkreter:

Verstehst Du jetzt, warum ich keinen Zusammenhang zwischen Problem und Code in Deinem ersten Beitrag sehe? Jürgen


Orothred - Mo 01.10.07 10:41

das mit dem WHERE ID = @ID hab ich ja jetzt auch so gemacht. aber es funktioniert trotzdem ohne UPDATE und sowas ^^ schau dir mein programm adressverwaltung im freeware-bereich an, da kannste dich ja davon überzeugen, das es funktioniert


jasocul - Mo 01.10.07 10:55
Titel: Re: Datensatz aus Datenbank löschen
user profile iconOrothred hat folgendes geschrieben:
damit füge ich allerdings nur einen neuen datensatz in die datenbank ein, der alte, der eigentlich aktualisiert werden soll, bleibt erhalten. wie bekomme ich es hin, das der neue datensatz eingefügt und der alte gelöscht wird?
Mit UPDATE statt INSERT. Dafür gibt es den SQL-Befehl.
Wenn Du auf Deinem Verfahren bestehst, dann musst Du nach dem INSERT noch ein DELETE machen. Aber mit dem richtigen Datensatz. Allerdings ist so eine Vorgehensweise "unüblich".


Orothred - Mo 01.10.07 10:58

also ich habs mit INSERT und DELETE gemacht....dann isses eben "unüblich" ^^ abstrakte programmierung....etwas schaffen, was sonst keiner macht....so kann mans auch nennen ^^


jasocul - Mo 01.10.07 11:02

user profile iconOrothred hat folgendes geschrieben:
etwas schaffen, was sonst keiner macht
Das hat schon seine Gründe, warum das sonst keiner macht. Du machst zwei DB-Zugriffe. Der Rest der Welt nur einen. Ich sehe da echte Vorteile. Abgesehen davon würde sich Dein Source verkleinern und besser zu warten sein. Aber mache es, wie Du willst. :wink:

Übrigens:
Probier doch mal, mit Deiner Methode 50000 Datensätze zu bearbeiten. Kannst dafür ja eine Schleife basteln. Du musst dafür nicht mal wirklich was am Datensatz ändern. Schau Dir die Größe der DB-Dateien vorher und hinterher an.


JüTho - Mo 01.10.07 11:05
Titel: Re: Datensatz aus Datenbank löschen
user profile iconjasocul hat folgendes geschrieben:
Wenn Du auf Deinem Verfahren bestehst, dann musst Du nach dem INSERT noch ein DELETE machen. Aber mit dem richtigen Datensatz. Allerdings ist so eine Vorgehensweise "unüblich".

user profile iconOrothred hat folgendes geschrieben:
das mit dem WHERE ID = @ID hab ich ja jetzt auch so gemacht. aber es funktioniert trotzdem ohne UPDATE und sowas ^^ schau dir mein programm adressverwaltung im freeware-bereich an, da kannste dich ja davon überzeugen, das es funktioniert

Mehr oder weniger als [OT] zu verstehen:
Wenn ich mir verschiedene Punkte anschaue - INSERT zum Ändern, Array als Ziel beim Einlesen, das "Durcheinander" der Klassen -, scheue ich mich, Deine Anwendung zu untersuchen. Es mag ja sein, dass es oberflächlich so läuft, wie Du es Dir vorstellst; ich habe aber den Eindruck, dass Du mit Deinem unüblichen Vorgehen sehr schnell an neue Klippen gerätst, dann das Problem nicht erkennst, neue Ratschläge mit Deinem Vorgehen nicht zusammenpassen und Dir als Hilfe deshalb nicht genügen.

Ich werde mich deshalb in diesem Zusammenhang auf einzelne Ratschläge beschränken. Jürgen


Orothred - Mo 01.10.07 11:22

durcheinander der klassen musste mir erklären ^^