Autor |
Beitrag |
ChrisxX
      
Beiträge: 19
|
Verfasst: Fr 27.02.09 11:20
moin, ich habe versucht geänderte Datensätze zu speichern, doch leider will es nicht klappen.
Vielleicht bin ich ja auf dem Holzweg und habe den falschen Ansatz.
hier mal mein Versuch:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| private void button10_Click_1(object sender, EventArgs e) {
this.Validate(); this.hauptdatensatzBindingSource.EndEdit(); DataSet1.HauptdatensatzDataTable modifiedOrders = (DataSet1.HauptdatensatzDataTable) this.dataSet11.Hauptdatensatz.GetChanges(DataRowState.Modified); this.hauptdatensatzTableAdapter.Adapter.Update(modifiedOrders); MessageBox.Show("Update successful"); } |
kann mir jemand einen Tipp geben wie das richtig geht? Moderiert von Kha: Topic aus WinForms verschoben am Fr 27.02.2009 um 13:26
|
|
Console.Beep()
      
Beiträge: 43
Win XP, Ubuntu 8.10
C# (VS 2008 Exp) C++ (VS 2008 Exp)
|
Verfasst: Fr 27.02.09 11:55
ich glaube du musst das Dataset updaten und nicht den adapter bin mir aber nicht sicher. evtl kann dir das helfen openbook.galileocomp...al_csharp_29_001.htm
ich finde dein Code lustig, das Update funzt nicht aber trotzdem
MessageBox.Show("Update successful"); 
_________________ Ihr zweifelt an der Existenz der If-Schleife??? Ihr müsst nur fest daran glauben!!!
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Fr 27.02.09 12:46
Hallo Chris,
den TableAdapter kenne ich eigentlich nicht, weil ich mit #D arbeite und nicht mit VS. Seltsam kommt mir vor, dass Du TableAdapter.Adapter benutzt. Außerdem ist die Abfrage nach den geänderten Zeilen überflüssig; das macht der Update-Befehl selbst.
Du könntest es also wie folgt verkürzen:
C#-Quelltext 1: 2: 3: 4: 5:
| private void button10_Click_1(object sender, EventArgs e) { hauptdatensatzBindingSource.EndEdit(); hauptdatensatzTableAdapter.Update(DataSet1.HauptdatensatzDataTable); } |
Übrigens kann "this" fast immer weggelassen werden; und Bezeichner wie Button10 und DataSet1 gehören verboten. Siehe auch NET: Richtlinien für Namen
Beeps Hinweis möchte ich noch ergänzen: Der TableAdapter wird im OpenBook Kap. 30.5/6 behandelt.
Gruß Jürgen
|
|
ChrisxX 
      
Beiträge: 19
|
Verfasst: Fr 27.02.09 13:01
JüTho hat folgendes geschrieben : | Hallo Chris,
Übrigens kann "this" fast immer weggelassen werden; und Bezeichner wie Button10 und DataSet1 gehören verboten. Siehe auch NET: Richtlinien für Namen
Gruß Jürgen |
thx, ich werds mal probieren.
das mit dem this ist mir bekannt, aber ist irgendwie aus Gewohnheit drinn. Und das mit dem Bezeichner  ja man sollte gleich nach dem Anlegen von Buttons usw den Namen ändern, sonst vergisst man das hinterher.
|
|
ChrisxX 
      
Beiträge: 19
|
Verfasst: Fr 27.02.09 13:09
also es kommen gleich 2 Fehlermeldungen dabei wenn ich das so schreibe:
C#-Quelltext 1: 2: 3: 4: 5:
| private void button10_Click_1(object sender, EventArgs e) { hauptdatensatzBindingSource.EndEdit(); hauptdatensatzTableAdapter.Update(DataSet1.HauptdatensatzDataTable); } |
Zitat: |
Fehler 1
"KitaVerwaltung.DataSet1TableAdapters.HauptdatensatzTableAdapter" enthält keine Definition für "Update", und es konnte keine Erweiterungsmethode "Update" gefunden werden, die ein erstes Argument vom Typ "KitaVerwaltung.DataSet1TableAdapters.HauptdatensatzTableAdapter" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)
Fehler 2
"KitaVerwaltung.DataSet1.HauptdatensatzDataTable" ist "Typ" und im angegebenen Kontext nicht gültig.
|
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Fr 27.02.09 13:24
Bitte selber im OpenBook suchen, wie es richtig aussehen muss! Außerdem sprechen die Fehlermeldungen für sich:
HauptdatensatzDataTable ist ein Typ, aber Du musst den Namen der DataTable angeben, also einer bestimmten Instanz.
"Irgendwo" gibt es einen Update-Befehl, dem der Name der DataTable angegeben werden muss.
Wie gesagt, ich arbeite nicht mit TableAdapter. Ich kann nur Hinweise für die Eigeninitiative geben. Jürgen
|
|
daisyking
      
Beiträge: 17
|
Verfasst: Fr 05.06.09 09:53
hallo zusammen,
das mit dem updaten, insert und delete-Anweisungen habe ich auch probleme.
vorab teile ich mal mit, dass ich mit der prog-sprache c# über visual studio 2008 und dem dbms sql server 2005 versuche zu arbeiten.
um zu veranschaulichen habe ich mal etwas an code beigefügt, damit eventuelle fragen beantwortet sein dürften.
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:
| public void fillData() { dbDatenbank.con = new SqlConnection(Constants.dbConnection); dbDatenbank.cmdMonitor = new SqlCommand(Constants.selMonitor); dbDatenbank.cmdMonitor.Connection = dbDatenbank.con; dbDatenbank.daMonitor = new SqlDataAdapter(dbDatenbank.cmdMonitor);
dbDatenbank.con.Open();
dbDatenbank.dsMonitor = new _Test_VerwaltungDataSet(); dbDatenbank.daMonitor.Fill(dbDatenbank.dsMonitor, "tabMonitor"); dbDatenbank.dtMonitor = dbDatenbank.dsMonitor.Tables["tabMonitor"];
dbDatenbank.con.Close();
dbDatenbank.bsMonitor = new BindingSource(dbDatenbank.dsMonitor, "tabMonitor");
dbDatenbank.bMoMarke = new Binding("Text", dbDatenbank.bsMonitor, "Marke"); dbDatenbank.bMoHaus = new Binding("Text", dbDatenbank.bsMonitor, "Hausnummer"); dbDatenbank.bMoAnschluss = new Binding("Text", dbDatenbank.bsMonitor, "Anschluss"); dbDatenbank.bMoZoll = new Binding("Text", dbDatenbank.bsMonitor, "Zoll"); dbDatenbank.bMoWartung = new Binding("Text", dbDatenbank.bsMonitor, "Wartung"); dbDatenbank.bMoAnschaffung = new Binding("Text", dbDatenbank.bsMonitor, "Anschaffung");
tbMonitorMarke.DataBindings.Add(dbDatenbank.bMoMarke); tbMonitorHausnr.DataBindings.Add(dbDatenbank.bMoHaus); tbMonitorAnschluss.DataBindings.Add(dbDatenbank.bMoAnschluss); tbMonitorZoll.DataBindings.Add(dbDatenbank.bMoZoll); tbMonitorWartung.DataBindings.Add(dbDatenbank.bMoWartung); tbMonitorAnschaffung.DataBindings.Add(dbDatenbank.bMoAnschaffung); ..... }
private void btnMonitorFirst_Click(object sender, EventArgs e) { dbDatenbank.bsMonitor.MoveFirst(); } private void btnMonitorMinus_Click(object sender, EventArgs e) { dbDatenbank.bsMonitor.MovePrevious(); } private void btnMonitorPlus_Click(object sender, EventArgs e) { dbDatenbank.bsMonitor.MoveNext(); } private void btnMonitorLast_Click(object sender, EventArgs e) { dbDatenbank.bsMonitor.MoveLast(); } |
nur für das Update der datensätze funktioniert nicht so wie gedacht:
C#-Quelltext 1: 2: 3: 4: 5:
| private void btnPcUebernehmen_Click(object sender, EventArgs e) { bsmonitor.endit(); da.update(); } |
ich habe sicher lich etwas vergessen, oder?
ich hoffe ihr könnt mir schnell helfen. mein chef macht mich sonst nen kopf kürzer^^ hab auch schon etliche bücher nachgeschaut u gegoogelt. aber es wird da nur von acces geredet.
gruss daisy
Moderiert von Kha: Code- durch C#-Tags ersetzt
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Fr 05.06.09 12:18
daisyking hat folgendes geschrieben : | nur für das Update der datensätze funktioniert nicht so wie gedacht: |
Das ist keine ausreichende Problembeschreibung: Wird nichts gemacht, werden falsche Änderungen gespeichert, gibt es Exceptions?
Grundsätzlich sieht es halbwegs sauber aus. (Grundprobleme, die du machst, haben wohl nichts mit dem konkreten Problem zu tun; dazu später mehr.) Wie sieht der SelectCommand aus? Gibt es für InsertCommand, UpdateCommand, DeleteCommand Befehlstexte? Wie sehen diese aus? Greifst du wirklich nur auf eine DB-Tabelle zu, oder verknüpfst du mehrere Tabellen per JOIN (das würde das automatische Update verhindern)? Hat die Tabelle einen PrimaryKey, und ist der im SelectCommand enthalten (wenn nein, geht es nicht)?
Die Grundprobleme: Eine DbConnection und ein DbDataAdapter werden nur kurzfristig für einen Befehl (bzw. eine Menge zeitlich zusammengehörender Befehle) erzeugt und benutzt; sofort anschließend folgen Close und Dispose. Damit das sichergestellt ist, sollten diese in using-Blöcke gekapselt werden.
Übrigens kann das DataBindings.Add vereinfacht werden; die Binding-Zwischenwerte sind nicht nötig. Und ein Chef, der einen bei Problemen "einen Kopf kürzer macht", gehört auf den Mond geschossen. (Ich war selbst lange genug Chef...)
Gruß Jürgen
|
|
daisyking
      
Beiträge: 17
|
Verfasst: Mo 08.06.09 09:36
hallo jürgen,
danke für die schnelle antwort. ich versuche mal, dir sämtliche infos zugeben die du brauchst.
Zitat: |
Wie sieht der SelectCommand aus? Gibt es für InsertCommand, UpdateCommand, DeleteCommand Befehlstexte? Wie sehen diese aus?
|
für Abfragen habe ich eine gesonderte klasse erstellt - Constants. dazu kann ich folgendes mitteilen:
Quelltext 1: 2: 3: 4: 5: 6:
| public const string updateMonitor = "UPDATE tabMonitor SET Marke = @tbMonitorMarke, Hausnummer = @tbMonitorHausnr, Anschluss = @tbMonitorAnschluss,Zoll = @tbMonitorZoll, Wartung =@tbMonitorWartung, Anschaffung = @tbMonitorAnschaffung";
public const string insertMonitor = "INSERT INTO tabMonitor VALUES Marke = @tbMonitorMarke, Hausnummer = @tbMonitorHausnr, Anschluss = @tbMonitorAnschluss,Zoll = @tbMonitorZoll, Wartung =@tbMonitorWartung, Anschaffung = @tbMonitorAnschaffung";
public const string deleteMonitor = "DELETE FROM tabMonitor WHERE tabMonitor.Hausnummer = @deleteMonitorID"; |
außerdem versuche ich immer expliziet auf die jeweilige tabelle mit der SELECT_Anweisung zuzugreifen. wegen dem PK habe ich es nicht ausprobiert, da ich mir nicht sicher bin ob das überhaupt geht.
Zitat: |
Übrigens kann das DataBindings.Add vereinfacht werden; die Binding-Zwischenwerte sind nicht nötig.
|
hm, geht das!?
mfg daisyking
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Mo 08.06.09 10:59
Hallo,
die genaue Problembeschreibung fehlt immer noch.
Der INSERT-Befehl ist von der SQL-Struktur her falsch; er muss lauten:
SQL-Anweisung 1: 2: 3: 4:
| INSERT INTO tabMonitor (Marke, Hausnummer, Anschluss, Zoll, Wartung, Anschaffung) VALUES (@tbMonitorMarke, @tbMonitorHausnr, @tbMonitorAnschluss, @tbMonitorZoll, @tbMonitorWartung, @tbMonitorAnschaffung); |
Beim UPDATE-Befehl fehlt vermutlich die WHERE-Bedingung.
Sind denn die Parameter auch mit den DataTable-Spalten verknüpft? Hinweise dazu findest du in [Artikelserie] Parameter von SQL Befehlen am Anfang des 4. Beitrags bei den Konstruktoren.
Zitat: | wegen dem PK habe ich es nicht ausprobiert, da ich mir nicht sicher bin ob das überhaupt geht. |
Du wirst doch wissen oder prüfen können, ob die MonitorID im SELECT-Befehl und damit in der DataTable enthalten ist oder nicht.
Zum DataBinding meinte ich es so (aber das ist wirklich nebensächlich):
C#-Quelltext 1: 2: 3: 4: 5:
| dbDatenbank.bMoMarke = new Binding("Text", dbDatenbank.bsMonitor, "Marke"); tbMonitorMarke.DataBindings.Add(dbDatenbank.bMoMarke); tbMonitorMarke.DataBindings.Add("Text", dbDatenbank.bsMonitor, "Marke"); |
Bei vielen Methoden gibt es viele Überladungen.
Gruß Jürgen
|
|
daisyking
      
Beiträge: 17
|
Verfasst: Mi 10.06.09 09:48
hallo jürgen,
vielen dank nochmal für die tipps. habe das update-verfahren hinbekommen.
es sieht zwar etwas konfuse aus,aber es funktioniert. habe am anfang die where-klausel weggelassen ( ich schussel)aber habe diese nachträglich hinzugefügt.
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:
| private void btnMonitorUebernehmen_Click(object sender, EventArgs e) { SqlDataAdapter daMonitor = new SqlDataAdapter(); dbDatenbank.con = new SqlConnection(Constants.dbConnection); SqlCommand cmdMonitor = new SqlCommand("UPDATE tabMonitor SET Marke = @tbMonitorMarke, Hausnummer = @tbMonitorHausnr," + " Anschluss = @tbMonitorAnschluss,Zoll = @tbMonitorZoll, Wartung =@tbMonitorWartung, Anschaffung = @tbMonitorAnschaffung WHERE Moni_ID = @MonID", dbDatenbank.con); // Parameter anhängen cmdMonitor.Parameters.AddWithValue("@tbMonitorMarke",tbMonitorMarke.Text); cmdMonitor.Parameters.AddWithValue("@tbMonitorHausnr", tbMonitorHausnr.Text); cmdMonitor.Parameters.AddWithValue("@tbMonitorAnschluss", tbMonitorAnschluss.Text); cmdMonitor.Parameters.AddWithValue("@tbMonitorZoll", tbMonitorZoll.Text); cmdMonitor.Parameters.AddWithValue("@tbMonitorWartung", tbMonitorWartung.Text); cmdMonitor.Parameters.AddWithValue("@tbmonitorAnschaffung", tbMonitorAnschaffung.Text); SqlParameter parameter = cmdMonitor.Parameters.Add("@MonID", SqlDbType.Int, 4, "Moni_ID"); parameter.SourceVersion = DataRowVersion.Original; try { dbDatenbank.bsMonitor.EndEdit(); dbDatenbank.daMonitor.UpdateCommand=cmdMonitor; dbDatenbank.daMonitor.Update(dbDatenbank.dsMonitor, "tabMonitor"); dbDatenbank.dsMonitor.AcceptChanges(); } catch (Exception myException) { MessageBox.Show(myException.Message); } MessageBox.Show(Constants.datensatzUpdate); } |
jetzt werd ich mich mal an das insert- und delete-anweisung machen. meine insert-anweisung sieht zur zeit nämlich so aus:
SQL-Anweisung 1:
| "NSERT INTO tabMonitor(Moni_ID,Marke, Hausnummer, Anschluss, Zoll, Wartung,Anschaffung)VALUES (null, @tbMonitorMarke,@tbMonitorHausnr,@tbMonitorAnschluss,@tbMonitorZoll,@tbMonitorWartung,@tbMonitorAnschaffung |
die parameter habe ich entsprechend der textboxen deklariert.nur man hat mir gesagt, dass das hinzufügen/löschen für binding-source wie bs.addnew(); u bs.removecurrent(); so ihre "macken" haben.
aber ich vermute, dass ich schwierigkeiten bekommen werde, da ich noch einen fremdschlüssel von einer anderen tabelle habe und diese auch noch setzen muss, oder?
ich las mich aber net unterkriegen u versuche es hinzubekommen.
gruss daisyking 
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Mi 10.06.09 10:34
Hallo,
nein, das sieht schon sehr gut aus. Es ist nun mal Schreibarbeit, aber doch weitgehend sicher. Nur ein paar Kleinigkeiten:
- Setze vor allem die DbConnection und am besten auch den DbDataAdapter in einen using-Block. Das sichert die Ressourcen noch besser ab.
- Ich verstehe nicht, wozu SourceVersion ausdrücklich auf Original gesetzt wird; aber das hängt vielleicht mit deinem sonstigen Vorgehen zusammen.
- AcceptChanges kannst du streichen; das macht der Update-Befehl automatisch.
- Wenn du Exceptions per MessageBox prüfen willst, dann benutze besser ex.ToString(); das liefert erheblich mehr Informationen als Message.
- Markiere Code bitte mit C#, nicht mit allg. Code.
Zitat: | da ich noch einen fremdschlüssel von einer anderen tabelle habe und diese auch noch setzen muss, oder? |
Korrekt, aber über DataRelation gibt es auch dafür Wege.
Viel Erfolg weiterhin! Jürgen
PS. Bitte mache bei langen Code-Zeilen Zeilenumbrüche, das liest sich besser als mit Scrollen.
|
|
daisyking
      
Beiträge: 17
|
Verfasst: Fr 12.06.09 11:05
hallo jürgen,
werde deine tipps beherzigen. aber mit den DataRelation ist das so eine sache.
bei msdn sollte das, von hörensagen, eigentlich gut erklärt sein. aber cheffe meinte, ich sollte es lieber mit der sql-Anweisung INSERT INTO machen - da er sich damit so auskennt.u somit nicht anderes reinkommen soll. *toll* naja ich werd das irgendwie schon schaffen.
Auszug:
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:
| try { string testy = ""; SqlDataAdapter daMonitor = new SqlDataAdapter(); dbDatenbank.con = new SqlConnection(Constants.dbConnection); SqlCommand cmd1 = new SqlCommand(Constants.selMonitor, dbDatenbank.con); daMonitor.SelectCommand = cmd1; for (int i = 0; i < dbDatenbank.dtRaum.Rows.Count - 1; i++) { if (dbDatenbank.dtRaum.Rows[i][1].ToString() == cbMonitorRaum.Text) { testy = dbDatenbank.dtRaum.Rows[i][0].ToString(); } } MessageBox.Show(testy);
int @MoniRaumID = Convert.ToInt32(testy); DataSet dsMonitor = new DataSet(); daMonitor.Fill(dsMonitor, "tabMonitor"); SqlCommand cmdMonitor = new SqlCommand("INSERT INTO tabMonitor (Marke, Hausnummer, Anschluss, Zoll, Wartung,Anschaffung, RaumID) VALUES "+ "( null ,@tbMonitorMarke,@tbMonitorHausnr,@tbMonitorAnschluss,@tbMonitorZoll,@tbMonitorWartung,@tbMonitorAnschaffung,"+ "(SELECT RaumID FROM tabRaum WHERE RaumID = @MoniRaumID))", dbDatenbank.con);
cmdMonitor.Parameters.AddWithValue("@tbMonitorMarke", tbMonitorMarke.Text); cmdMonitor.Parameters.AddWithValue("@tbMonitorHausnr", tbMonitorHausnr.Text); cmdMonitor.Parameters.AddWithValue("@tbMonitorAnschluss", tbMonitorAnschluss.Text); cmdMonitor.Parameters.AddWithValue("@tbMonitorZoll", tbMonitorZoll.Text); cmdMonitor.Parameters.AddWithValue("@tbMonitorWartung", tbMonitorWartung.Text); cmdMonitor.Parameters.AddWithValue("@tbMonitorAnschaffung", tbMonitorAnschaffung.Text); daMonitor.InsertCommand = cmdMonitor; daMonitor.Update(dsMonitor, "tabMonitor");
} catch (Exception ex) { MessageBox.Show(ex.ToString()); } MessageBox.Show(Constants.insertMonitor); } |
also müsste ich im DataRelation-Anwendung die child- und parent-tabelle erstellen, wobei die child-tabelle die tabelle ist woher ich den fremdschlüssel habe.*wenn ich es richtig verstanden habe*
oh man , vom regen in die traufe
werd mal am we mich daransetzen und es versuchen. hoffe ich bekomme bücher aus der firma zum nachlesen mit.
so, wünsch euch erstmal schönes erholsames wochenende.
gruss daisyking 
|
|
daisyking
      
Beiträge: 17
|
Verfasst: Di 16.06.09 10:33
hallo zusammen,
habe es geschaft datensätze zu löschen und poste mal die lösung.
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:
| string qry = " SELECT * FROM tabeMonitor"; string delete = "DELETE FROM tabeMonitor WHERE Hausnummer = @deleteMonitorHausnummer";
SqlConnection con = new SqlConnection(Constants.dbConnection);
try { SqlDataAdapter daMonitor = new SqlDataAdapter(); daMonitor.SelectCommand = new SqlCommand(qry, con);
_Test_VerwaltungDataSet dataSetMonitor = new _Test_VerwaltungDataSet();
daMonitor.Fill(dataSetMonitor,"tabeMonitor"); DataTable dtMonitor = dataSetMonitor.Tables["tabeMonitor"]; SqlCommand cmdMonitor = new SqlCommand(delete,con); cmdMonitor.Parameters.AddWithValue("@deleteMonitorHausnummer", tbMonitorHausnr.Text); foreach (DataRow drMonitor in dtMonitor.Rows ) { drMonitor.Delete(); } daMonitor.DeleteCommand = cmdMonitor; daMonitor.Update(dataSetMonitor,"tabeMonitor"); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } MessageBox.Show(Constants.datensatzClear); |
so werd mich mal mit dem hizufügen beschäftigen,aber falls jemand ein lösungsweg hat bitte mitteilen. habe zumindest es schon mal soweit gebracht.
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:
| string qry = Constants.seleMonitor; string insertMoni = ("INSERT INTO tabeMonitor (Marke, Hausnummer, Anschluss, Zoll, Wartung,Anschaffung, RaumID) VALUES " + "(null, @tbMonitorMarke,@tbMonitorHausnr,@tbMonitorAnschluss,@tbMonitorZoll,@tbMonitorWartung,@tbMonitorAnschaffung,)");
SqlConnection con = new SqlConnection(Constants.dbConnection);
try { SqlDataAdapter daMonitor = new SqlDataAdapter(); daMonitor.SelectCommand = new SqlCommand(qry,con);
_Test_VerwaltungDataSet insMonitor = new _Test_VerwaltungDataSet();
daMonitor.Fill(insMonitor,"tabeMonitor"); con.Open(); DataTable dtMonitor = insMonitor.Tables["tabeMonitor"];
SqlCommand cmdMonitor = new SqlCommand(insertMoni,con); cmdMonitor.Parameters.AddWithValue("@tbMonitorMarke", tbMonitorMarke.Text); cmdMonitor.Parameters.AddWithValue("@tbMonitorHausnr", tbMonitorHausnr.Text); cmdMonitor.Parameters.AddWithValue("@tbMonitorAnschluss", tbMonitorAnschluss.Text); cmdMonitor.Parameters.AddWithValue("@tbMonitorZoll", tbMonitorZoll.Text); cmdMonitor.Parameters.AddWithValue("@tbMonitorWartung", tbMonitorWartung.Text); cmdMonitor.Parameters.AddWithValue("@tbMonitorAnschaffung", tbMonitorAnschaffung.Text); for (int i = 0; i < dtMonitor.Rows.Count -1; i++) { if (dtMonitor.Rows.Count == i) { DataRow rMonitor = dtMonitor.NewRow(); dtMonitor.Rows.Add(rMonitor);
rMonitor["Marke"] = tbMonitorMarke.Text; rMonitor["Hausnummer"] = tbMonitorHausnr.Text; rMonitor["Anschluss"] = tbMonitorAnschluss.Text; rMonitor["Zoll"] = tbMonitorZoll.Text; rMonitor["Wartung"] = tbMonitorWartung.Text; rMonitor["Anschaffung"] = tbMonitorAnschaffung.Text;
} } daMonitor.InsertCommand = cmdMonitor; daMonitor.Update(insMonitor,"tabeMonitor");
} catch (Exception ex) { MessageBox.Show(ex.ToString()); } con.Close(); MessageBox.Show(Constants.datensatzSpeichern); |
bis denne
gruss daisyking
|
|
daisyking
      
Beiträge: 17
|
Verfasst: Mi 17.06.09 00:12
huhu alle zusammen,
hab auch das insert-befehl geschafft. poste die lösungen später mal rein. *omg*
aber wie kann ne listbox füllen? ich übergebe über ein selected_indexChange einen wert aus der combobox und nehme diesen als Where- anweisung. aber irgendwie möchte das nicht so wie ich es haben möchte^^ bin mal so frei und poste mal den code den ich bis dato habe.
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:
| private void cbAusleiheStandortPcFuellen() { globelVar.spaltennr = 0;
SqlConnection con = new SqlConnection(Constants.dbConnection); _Test_VerwaltungDataSet myDataSet = new _Test_VerwaltungDataSet(); SqlCommand cmd = new SqlCommand(Constants.selePc, con); SqlDataAdapter da = new SqlDataAdapter(cmd); con.Open(); cbAusleiheStandortPc.Items.Clear();
da.Fill(myDataSet); SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read()) { cbAusleiheStandortPc.Text = "Bitte auswählen"; cbAusleiheStandortPc.Items.Add(dr.GetValue(globelVar.spaltennr).ToString()); } con.Close(); dr.Close(); } private void cbAusleiheStandortPc_SelectedIndexChanged(object sender, EventArgs e) { string ausleiheStandortPc = cbAusleiheStandortPc.Text;
globelVar.spaltennr = 0;
SqlConnection con = new SqlConnection(Constants.dbConnection); _Test_VerwaltungDataSet myDataSetStandortName = new _Test_VerwaltungDataSet();
SqlCommand cmd = new SqlCommand("SELECT * FROM tabPc WHERE Hausnummer = @tbAusleiheStandortPC", dbDatenbank.con); cmd.Parameters.AddWithValue("@tbAusleiheStandortPc", ausleiheStandortPc); SqlDataAdapter da = new SqlDataAdapter(cmd);
con.Open();
da.Fill(myDataSetStandortName); SqlDataReader dr = cmd.ExecuteReader();
foreach (DataRow rPc in myDataSetStandortName.Tables["tabPc"].Rows) { listBoxPcStandortLeihe.Items.Add("Festplatte: " + rPc["Festplattenvolumen"].ToString()); } con.Close(); dr.Close(); } |
naja, vielleicht ist es ja nur ein kleiner fehler hier drin bzw ich seh den wald vor lauter bäume nicht. ich hoffe ihr könnt mir da etwas helfen. das buch was ich mir geholt habe (datenbankprogrammierung mit c#), soll falsche sachen drin stehen, sagt zumindest ein arbeitskollege.
hm, wie gesagt - die hoffnung stirbt zuletzt.
gruss daisyking
|
|
daisyking
      
Beiträge: 17
|
Verfasst: Mi 17.06.09 22:53
nabend zusammen,
so, ich hab den wald vor lauter bäumen gesehen.
sry das ich wahrscheinlich einigen arbeit gemacht habe, aber ich habs gelöst bekommen.
hier mal meine lösung:
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:
| string ausleiheStandortMonitor = cbAusleiheStandortMonitor.Text; listBoxMonitorStandortLeihe.Items.Clear(); SqlConnection con = new SqlConnection(Constants.dbConnection);
SqlCommand cmd = new SqlCommand(Constants.selectComboMonitor, con); cmd.Parameters.AddWithValue("@tbAusleiheStandortMonitor", ausleiheStandortMonitor);
_Test_VerwaltungDataSet myDataSet = new _Test_VerwaltungDataSet(); SqlDataAdapter da = new SqlDataAdapter(cmd);
con.Open();
da.Fill(myDataSet, "tabeMonitor"); con.Close(); DataTable dt = myDataSet.Tables["tabeMonitor"];
foreach (DataRow cRow in dt.Rows) { foreach (DataColumn cCol in dt.Columns) { listBoxMonitorStandortLeihe.Items.Add(cCol.ColumnName + ": " + cRow[cCol.Ordinal].ToString()); listBoxMonitorStandortLeihe.Items.Add("--------------"); } } |
der weg ist wahrscheinlich zu umständlich, aber es funktioniert.
ich werd dann mal wieder. bis denne
gruss daisyking
|
|
daisyking
      
Beiträge: 17
|
Verfasst: Sa 20.06.09 22:48
nabend zusammen,
hier ist, wie bereits mitgeteilt, die lösung für die insert-anweisung.
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:
| string insert = ("INSERT INTO tabhallo (Marke, Wartung,Anschaffung) VALUES " + "(@tbMarke, @tbrWartung,@tbAnschaffung)");
SqlConnection con = new SqlConnection(Constants.dbConnection);
try { SqlDataAdapter dahallo = new SqlDataAdapter(); daMonitor.SelectCommand = new SqlCommand(qry, con); _Test_VerwaltungDataSet inshallo= new _Test_VerwaltungDataSet(); dahallo.Fill(insMonitor, "tabhallo"); con.Open() ; DataTable dthallo = inshallo.Tables["tabhallo"]; SqlCommand cmd = new SqlCommand(inserthallo, con); cmd.Parameters.AddWithValue("@tbMarke", tbhalloMarke.Text); cmd.Parameters.AddWithValue("@tbWartung", tbhalloWartung.Text); cmd.Parameters.AddWithValue("@tbAnschaffung", tbhalloAnschaffung.Text); cmd.ExecuteNonQuery(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } con.Close(); MessageBox.Show(Constants.datensatzSpeichern); |
hoffe es kann jemand auch noch damit was anfangen.
gruss daisyking 
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: So 21.06.09 11:24
Freut mich, dass es geklappt hat!
Nur zur Vereinfachung: daMonitor, Fill und die DataTable haben in diesem Zusammenhang keine Bedeutung, können also gelöscht werden. Auch kann ich keinerlei Sinn darin sehen, innerhalb dieser Routine ein neues DataSet zu erzeugen. Die Connection sollte in einen using-Block gekapselt werden; das erspart das Close und sichert die Auflösung der Instanz. (Konsequenterweise sollten auch DataAdapter und DbCommand in eigene using-Blöcke gesetzt werden, aber das muss dann nicht unbedingt sein.)
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| string inserthallo = ("INSERT INTO tabhallo (Marke, Wartung,Anschaffung) VALUES " + "(@tbMarke, @tbrWartung,@tbAnschaffung)");
using( SqlConnection con = new SqlConnection(Constants.dbConnection) ) { try { SqlDataAdapter dahallo = new SqlDataAdapter(); SqlCommand cmd = new SqlCommand(inserthallo, con); cmd.Parameters.AddWithValue("@tbMarke", tbhalloMarke.Text); cmd.Parameters.AddWithValue("@tbWartung", tbhalloWartung.Text); cmd.Parameters.AddWithValue("@tbAnschaffung", tbhalloAnschaffung.Text); con.Open() ; cmd.ExecuteNonQuery(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } MessageBox.Show(Constants.datensatzSpeichern); |
Gruß Jürgen
/Edit
Ach, das mit using-Blöcken hatte ich ja schon geschrieben; aber einmal genügt offensichtlich nicht. Einen Kommentar zu den "überflüssigen" Zeilen hatte ich bei den bisherigen Teillösungen nicht abgegeben, weil ich durch deine Struktur nicht richtig durchblicke.
|
|
|