Autor Beitrag
Acorwyn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Win 7 Ultimate 32/64 bit, Backtrack 4
C#
BeitragVerfasst: Do 31.03.11 10:27 
Hey,
Ich habe eine Anwendung erstellt die Daten in einem XamDataGrid anzeigt und nun will nun die Daten ändern. Ich hab es so gemacht das er alle Daten letzendlich in mehreren textBoxen ausgibt und ich über einen Knopf alles was geändert wurde, neu einträgt in der Datenbank.
Das alles habe ich schon hinbekommen, ich möchte es jetz blos so machen das es nicht sooo voll ist also alles mit einer Funktion.
Hier ist nochmal der Quellcode für den Button der alles ändert.. also ein Ausschnitt:

ausblenden volle Höhe 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:
private void button3_Click(object sender, RoutedEventArgs e)
        {
            //ID tbladress
            using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\hmprak\Documents\prakdb1(backup).accdb; Mode=12"))
            {
                conn.Open();
                using (OleDbCommand cmd = new OleDbCommand("UPDATE tbladress SET fldid = @newValue WHERE fldid = @id", conn))
                {
                    cmd.Parameters.AddWithValue("@newValue", textBox1.Text);
                    cmd.Parameters.AddWithValue("@id", String.Format("{1}{0}{2}", mStrAddressId, "{""}"));
                    cmd.ExecuteNonQuery();
                }
            }
            //Vorname tbladress
            using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\hmprak\Documents\prakdb1(backup).accdb; Mode=12"))
            {
                conn.Open();
                using (OleDbCommand cmd = new OleDbCommand("UPDATE tbladress SET fldname01 = @newValue WHERE fldid = @id", conn))
                {
                    cmd.Parameters.AddWithValue("@newValue", textBox2.Text);
                    cmd.Parameters.AddWithValue("@id", String.Format("{1}{0}{2}", mStrAddressId, "{""}"));
                    cmd.ExecuteNonQuery();
                }
            }
            //Zweitname tbladress
            using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\hmprak\Documents\prakdb1(backup).accdb; Mode=12"))
            {
                conn.Open();
                using (OleDbCommand cmd = new OleDbCommand("UPDATE tbladress SET fldname02 = @newValue WHERE fldid = @id", conn))
                {
                    cmd.Parameters.AddWithValue("@newValue", textBox3.Text);
                    cmd.Parameters.AddWithValue("id", String.Format("{1}{0}{2}", mStrAddressId, "{""}"));
                    cmd.ExecuteNonQuery();
                }
            }
            //Nachname tbladress
            using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\hmprak\Documents\prakdb1(backup).accdb; Mode=12"))
            {
                conn.Open();
                using (OleDbCommand cmd = new OleDbCommand("UPDATE tbladress SET fldname03 = @newValue WHERE fldid = @id", conn))
                {
                    cmd.Parameters.AddWithValue("@newValue", textBox4.Text);
                    cmd.Parameters.AddWithValue("@oldValue", String.Format("{1}{0}{2}", mStrAddressId, "{""}"));
                    cmd.ExecuteNonQuery();
                }
            }
            //Straße tbladress
            using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\hmprak\Documents\prakdb1(backup).accdb; Mode=12"))
            {
                conn.Open();
                using (OleDbCommand cmd = new OleDbCommand("UPDATE tbladress SET fldstraße = @newValue WHERE fldid = @id", conn))
                {
                    cmd.Parameters.AddWithValue("@newValue", textBox5.Text);
                    cmd.Parameters.AddWithValue("@oldValue", String.Format("{1}{0}{2}", mStrAddressId, "{""}"));
                    cmd.ExecuteNonQuery();
                }


So geht das noch lange weiter, und das ist nun einfach zu viel da ich weiß das man das alles auch mit einer Funktion machen kann. Ich weiß blos nicht wie :(
Bitte helft mir :)
Danke !


Moderiert von user profile iconChristian S.: Topic aus WPF / Silverlight verschoben am Do 31.03.2011 um 10:36

_________________
Mal verliert man, Mal gewinnen die anderen.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 31.03.11 12:37 
Hallo,

zum einen brauchst du ja nicht immer wieder die DBConnection neu zu erstellen, d.h. du könntest einfach die Commands in einen Connection-Block setzen.
Und zum anderen beschäftige dich mal mit dem Thema "Data Binding", z.B.
How to: Bind to an ADO.NET Data Source
Data Binding Overview

Einfach die Daten in eine DataTable laden (mittels eines DbDataAdapters) und dann mittels der Methode dataAdapter.Update() die (geänderten) Daten wieder an die Datenbank übermitteln.
s.a. DataSets, DataTables und DataViews (ADO.NET)
Acorwyn Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Win 7 Ultimate 32/64 bit, Backtrack 4
C#
BeitragVerfasst: Do 31.03.11 12:43 
Also meinst du das jetz beispielsweise so? :

ausblenden 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:
private void button3_Click(object sender, RoutedEventArgs e)
        {
            //ID tbladress
            using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\hmprak\Documents\prakdb1(backup).accdb; Mode=12"))
            {
                conn.Open();
                using (OleDbCommand cmd = new OleDbCommand("UPDATE tbladress SET fldid = @newValue WHERE fldid = @id", conn))
                {
                    cmd.Parameters.AddWithValue("@newValue", textBox1.Text);
                    cmd.Parameters.AddWithValue("@id", String.Format("{1}{0}{2}", mStrAddressId, "{""}"));
                }
            }
                using (OleDbCommand cmd = new OleDbCommand("UPDATE tbladress SET fldname01 = @newValue WHERE fldid = @id", conn))
                {
                    cmd.Parameters.AddWithValue("@newValue", textBox2.Text);
                    cmd.Parameters.AddWithValue("@id", String.Format("{1}{0}{2}", mStrAddressId, "{""}"));
                }
            }
                using (OleDbCommand cmd = new OleDbCommand("UPDATE tbladress SET fldname02 = @newValue WHERE fldid = @id", conn))
                {
                    cmd.Parameters.AddWithValue("@newValue", textBox3.Text);
                    cmd.Parameters.AddWithValue("id", String.Format("{1}{0}{2}", mStrAddressId, "{""}"));
                }
            }
                using (OleDbCommand cmd = new OleDbCommand("UPDATE tbladress SET fldname03 = @newValue WHERE fldid = @id", conn))
                {
                    cmd.Parameters.AddWithValue("@newValue", textBox4.Text);
                    cmd.Parameters.AddWithValue("@oldValue", String.Format("{1}{0}{2}", mStrAddressId, "{""}"));
                }
            }


Das wäre doch jetz in einem Block oder versteh ich was falsch ? :D
tut mir leid wegen den doofen fragen ich bin ziemlich neu ;)

_________________
Mal verliert man, Mal gewinnen die anderen.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 31.03.11 13:07 
Hallo,

du hast aber noch einige "}" zu viel drin...
(dann müssen nun aber die DBCommand-Variablen jeweils unterschiedlich heißen und das ExecuteNonQuery fehlt natürlich...)

Da du aber sowieso alles in eine Tabelle (bzw. sogar eine Zeile) wieder wegschreiben willst, reicht natürlich auch ein DbCommand:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
using (OleDbCommand cmd = new OleDbCommand("UPDATE tbladress SET fldid = @newId, fldname01 = @newName, fldname02 = @newForeName" + /*, ... */ " WHERE fldid = @id", conn))
{
    cmd.Parameters.AddWithValue("@newId", textBox1.Text);
    cmd.Parameters.AddWithValue("@newName", textBox2.Text);
    cmd.Parameters.AddWithValue("@newForeName", textBox3.Text);
    /* ... */
    cmd.Parameters.AddWithValue("@id", String.Format("{1}{0}{2}", mStrAddressId, "{""}")); // <-- sieht deine Id wirklich so aus: {id} ???
    cmd.ExecuteNonQuery();
}


Aber wie gesagt "Data Binding" ist der bessere (und einfachere Weg)!
Steht ja auch als Feature beim XamDataGrid: www.infragistics.com...tagrid.aspx#Overview ;-)

Für diesen Beitrag haben gedankt: Acorwyn
Acorwyn Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Win 7 Ultimate 32/64 bit, Backtrack 4
C#
BeitragVerfasst: Do 31.03.11 13:24 
Oke aber so wie du das geschrieben hast läuft es perfekt :)
ich danke dir !!

_________________
Mal verliert man, Mal gewinnen die anderen.