(c#) Wie speichert man Änderungen in einer Datenbank ab?

Robertico

Mitglied
Hi Alle,

Habe das letzte mal mit Datenbanken gearbeitet, als dBase 3 neu war.
Brauche jetzt eine Datenbank. Muss nicht mehr können, wie damals.

Bis zum Ändern der Werte bin ich gekommen. Aber ich suche schon seit 3 Tagen, wie die Werte in die Datenbank permanent übernommen werden.

Code:
void Verb()
        {
            SqlConnection con = new SqlConnection();
            con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Hausverwaltung.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
            try
            {
                con.Open();
            }
            catch (SqlException e)
            {
                MessageBox.Show(e.Message);
            }
            string strSQL = "SELECT * FROM Zählerstände ";
            SqlCommand cmd = new SqlCommand(strSQL, con);
            SqlDataAdapter da = new SqlDataAdapter(strSQL, con);
            DataSet ds = new DataSet();
            da.Fill(ds);
            // DataColumn colParent = ds.Tables[0].Columns["Wasser"];
            DataTable tbl = ds.Tables[0];
            DataRow rowNew = tbl.NewRow();
            rowNew["WasserEG"] = 523456;
            ds.Tables[0].Rows.Add(rowNew);
            ds.Tables[0].Rows[0]["WasserEnwor"] = 54687;
            maskedTextBox1.Text = ds.Tables[0].Rows[0]["WasserEnwor"].ToString();
            maskedTextBox2.Text = ds.Tables[0].Rows[1]["WasserEG"].ToString();
        }

Die Werte sind in der Datenbank, da sie in der TextBox erscheinen. Alle Versuche zum Update schlugen aber fehl.

Wäre sehr dankbar für Hilfe.

Gruß Robert
 
Du brauchst nur einen SqlCommand mit dem entsprechenden UPDATE-Statement (SQL) und dann den Command einfach mit ExecuteNonQuery() ausführen. Und schon wurde der Datensatz in der Datenbank aktualisiert.
 
Mein Problem ist, dass ich den entsprechenden String nicht hinbekomme. Habe schon alles erdenkliche versucht.

Verstehe aber nicht was dort hinein muss.

Code:
            strSQL = "UPDATE WasserEG FROM Zählerstände ";
            cmd = new SqlCommand(strSQL, con);
            cmd.ExecuteNonQuery();
und duzende weitere Versuche. :(

Oder müssen die Änderungen noch einmal über SQL gemacht werden?

Gruß Robert
 
Zuletzt bearbeitet:
Ah, sorry, mein Fehler. Du arbeitest ja mit dem DataAdapter. Schau dir einfach mal die Update-Methode [1] des DataAdapters an.

[1] http://msdn2.microsoft.com/en-us/library/system.data.common.dbdataadapter.update.aspx

Habe es jetzt auch mal so versucht:
Code:
            SqlCommand cmd = new SqlCommand(strSQL, con);
            con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Hausverwaltung.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
            con.Open();
            string strSQL = "SELECT * FROM Zählerstände ";
            SqlCommand cmd = new SqlCommand(strSQL, con);
            strSQL = "UPDATE Zählerstände Set WasserEG = 23564 WHERE WasserOG = 5";
            cmd = new SqlCommand(strSQL, con);

            MessageBox.Show( cmd.ExecuteNonQuery().ToString());
            
            con.Close();

Er zeigt auch brav 4 an. (sind 4 rows mit Wert 5 drin.)

Beende ich dann das Programm ist auch alles weg. Kann ich da etwas anderes unterlassen haben?

Gruß Robert
 
Habe jetzt mit da.Update gearbeitet.
Auch da muss ich einen Commandstring haben. Etwa 1700 haben im Web das gleiche Problem. Finde aber nirgens eine Erklärung.

//Mit Builder
Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.
// ohne
Update requires a valid UpdateCommand when passed DataRow collection with modified rows.

Gibt es nirgendwo ein kleines Projekt, in dem in einer Datenbank etwas verändert wird. Dann würde ich das heraus finden. :confused:
 
Habe ein kleines Projekt erstellt.

Buttons: ändern;einfügen; löschen.

Eine Datenbank mit einem Table, das drei Variablen hat.

Unter jedem Button ist Connection hergestellt.

Wenn jemand so nett wäre und sich das lädt, die paar Zeilen einfügt oder/und falsches löscht und mir dann zuschickt wäre ich unendlich dankbar. Ich komme nicht weiter. :(

E-Mail ist hier zu finden.

Gruß Robert
 
Zuletzt bearbeitet:
Zurück