Autor |
Beitrag |
Acorwyn
      
Beiträge: 17
Win 7 Ultimate 32/64 bit, Backtrack 4
C#
|
Verfasst: 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:
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) { 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(); } } 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(); } } 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(); } } 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(); } } 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 Christian S.: Topic aus WPF / Silverlight verschoben am Do 31.03.2011 um 10:36
_________________ Mal verliert man, Mal gewinnen die anderen.
|
|
Th69
      

Beiträge: 4799
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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 
      
Beiträge: 17
Win 7 Ultimate 32/64 bit, Backtrack 4
C#
|
Verfasst: Do 31.03.11 12:43
Also meinst du das jetz beispielsweise so? :
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) { 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 ?
tut mir leid wegen den doofen fragen ich bin ziemlich neu 
_________________ Mal verliert man, Mal gewinnen die anderen.
|
|
Th69
      

Beiträge: 4799
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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:
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, "{", "}")); 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 
      
Beiträge: 17
Win 7 Ultimate 32/64 bit, Backtrack 4
C#
|
Verfasst: 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.
|
|
|