Laden...

Ermitteln ob Zeile geändert oder neu / in db schreiben

Erstellt von Dexter323 vor 16 Jahren Letzter Beitrag vor 16 Jahren 11.433 Views
D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren
Ermitteln ob Zeile geändert oder neu / in db schreiben

mahlzeit,

folgende ausgangssituation:

in meiner datenbank gibt es ein tabelle die wie folgt ausgebaut ist:

Abteilung | Abteilungsleiter |geaendertvon|geaendertam |erstelltvon|erstelltam

es werden dem nutzer nur die ersten 2 felder angezeigt.
in den restlichen soll der angemeldete benutzer ( System.Environment.UserName )
und jeweils ein datum gespeichert werden.

diese vorgabe muss eingehalten werden.

Nun zu meinem problem :

folgendes soll passieren:

->> wenn ein bestehender datensatz geändert wird :
->"geaendertvon" bekommt username
->"gaendertam" bekommt nichts , da ein Timestamp in datenbank

->> wenn ein neuer Datensatz eingefügt wird:
->"geaendertvon" bekommt username
->"gaendertam" bekommt nichts , da ein Timestamp in datenbank
->"erstelltvon" bekommt username
->"erstelltam" bekommt aktuelles datum + uhrzeit

es wäre einfach , wenn es eigenschaften wie "valuechanged" oder "rowadded" , die man abprüfen kann.

ein 2ter ansatz war , die werte erst beim insert/update command +zu füllen:


MySqlCommand command = new MySqlCommand();

                command = new MySqlCommand("insert into t_Abteilungen (Abteilungen,Abteilungsleiter, geaendertam,geaendertvon,erfasstam,erfasstvon) values (?,?,?, ?geaendertam,?geaendertvon,?erfasstam,?erfasstvon)");
                command.Parameters.Add("?geaendertam",tools.get_datum());
                command.Parameters.Add("?geaendertvon",tools.get_user());
                command.Parameters.Add("?erfasstam",tools.get_datum());
                command.Parameters.Add("?erfasstvon",tools.get_user());
                da_Abteilungen.InsertCommand = command;

hab hier im forum gelesen, dass es bei mysql kein @ ist sonder ein ? sein muss ....

-> welcher ansatz is der sinnvollere oder sind beide mist?
wie kann ich den ansatz realisieren?

eig. gehört die nächste frage in datantechnologien, gehört aber auch hier zum thema:

-> ist der commad richtig definiert?

MfG Dex

Gelöschter Account
vor 16 Jahren

ich setze mal vorraus das du mit einem datagridview arbeitest.

es wäre einfach , wenn es eigenschaften wie "valuechanged" oder "rowadded" , die man abprüfen kann.

beides gibt es im Datagridview

MySqlCommand command = new MySqlCommand();  
  
                command = new MySqlCommand("insert into t_Abteilungen (Abteilungen,Abteilungsleiter, geaendertam,geaendertvon,erfasstam,erfasstvon) values (?,?,?, ?geaendertam,?geaendertvon,?erfasstam,?erfasstvon)");  
                command.Parameters.Add("?geaendertam",tools.get_datum());  
                command.Parameters.Add("?geaendertvon",tools.get_user());  
                command.Parameters.Add("?erfasstam",tools.get_datum());  
                command.Parameters.Add("?erfasstvon",tools.get_user());  
                da_Abteilungen.InsertCommand = command;   

1.zu viele parameter
2. ich bin mir nicht sicher, aber wird er da nciht meckern wenn du nur ein fargezeichen übergibst?
3. soll es nicht AddWithValue(...,...); sein?

ob du jetzt sofort oder erst beim allgemeinen update/insert die werte in die datenbank schreibst, musst du selber wissen, da nur du die anforderungen deiner software kennst.

wenn du wissen möchtest ob ein statement richtig ist, dann einfach mal ausführen.

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

hallo Jack30lena,

danke für die antwort!

weiso sind es denn zu viele Parameter?

zu den vlauechanged und rowadded kram....

dieses datagridview zehrt an meinen nerven, hab ganz vergessen ,dass ich ja einfach das event nehmen kann .. -.-#

werds testn und dann posten ob funktionert hat,.. wenn nicht werd ich mit dem
updatecommand beschäftigen.

MfG dex

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

habe leider feststellen müssen ,dass ich das "RowsAdded" event nicht nutzen kann , das es immer auftritt wenn eine zeile hinzugefügt wird,... nicht nur , wenn eine genzlich neue eingesetzt wird =(

ich werde wohl den ansatz mit den commands weiterverfolgen.

Gelöschter Account
vor 16 Jahren
insert into t_Abteilungen (Abteilungen,Abteilungsleiter, geaendertam,geaendertvon,erfasstam,erfasstvon) values (?,?,?, ?geaendertam,?geaendertvon,?erfasstam,?erfasstvon)");

Collumns:

  1. Abteilung
  2. Abteilungsleiter
  3. geaendertam
  4. geaendertvon
  5. erfasstam
  6. erfasstvon

Values:

  1. ?
  2. ?
  3. ?
  4. ?geaendertam
  5. ?geaendertvon
  6. ?erfasstam
  7. ?erfasstvon

6 erwartet und 7 bekommen.

habe leider feststellen müssen ,dass ich das "RowsAdded" event nicht nutzen kann , das es immer auftritt wenn eine zeile hinzugefügt wird,... nicht nur , wenn eine genzlich neue eingesetzt wird =(

heir hast du 2 möglichkeiten. bevor du programmtechnisch das datagridview füllst machst du:


mydataridview.RowAdded -= rowAddedEventMethode;

und nachher wieder ein +=

oder (hier bin ich mir absolut unsicher) du arbeitest mit begin... und end... aber ich kann mich jetzt nicht an die syntax und vorgehensweise erinnern. ich glaube , das dann die events nciht gefeuert werden aber wie gesagt, das müsste ich selber auch erst testen.

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

ok das mit dem command is mist, gleich ändern!

diese rowadded sache is mir einbisschen zu kompliziert, vorallem weil ich noch gar nicht die editierten zeilen abprüfe -.-

mfg Dex

2.760 Beiträge seit 2006
vor 16 Jahren

Wie wäre es mit einem Trigger in der DB. Bin leider mit MySQL nicht so betraut aber es sollte damit gehen.
geaendertvon zu setzen sollte etwas schwieriger sein aber ist evtl. irgendwie auch serverseitig (wer hat die Connection aufgebaut) machbar.

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

ich hba leider absolut keine ahnung , was du mir sagen willst ^^.... ist aber bestimmt ( wenn ud mirs erklärst) testbar.

2.760 Beiträge seit 2006
vor 16 Jahren

Die Wikipedia kann das besser als ich 😉http://de.wikipedia.org/wiki/Datenbanktrigger

Im Grunde kannst du damit eine Tabelle (und weiß gott was alles noch) überwachen.

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

ok kannte ich so gar nicht 🤔

mal sehen ob ich da hinbekomme 8)

Gelöschter Account
vor 16 Jahren

hallo jansen,

datenbanksetige trigger sind nach möglichkeit zu vermeiden. man kann so auch nur herausfinden, welcher pc oder angemeldete user das gemacht hat. möchte man aber unter einaem anderen usernamen etwas machen, dann ist es eigendlich auch schon vorbei (hängt vom connectionstring und der anmeldeart ab)

@Dexter323: eigendlich ist es eine simple sache was du da vor hast. trigger sind da riesige kanonen und deine aufgabe ist ein kleiner spatz.

mit events selber muss man ienfach umgehen können. jederzeit auch ohne designer abonnieren und abmelden können ist wichtig(und wirklich simpler als man annehmen könnte).

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

ich bin aber kein spatz =P

aber du hastim bezug auf die trigger recht. zudem ist die einarbeitungszeit zu groß. da ich da gaanz weig ahnung habe =P

2.760 Beiträge seit 2006
vor 16 Jahren

datenbanksetige trigger sind nach möglichkeit zu vermeiden

Allerdings auch die einzige Möglichkeit diese Werte zu schreiben wenn eine andere Anwendung die Tabelle ändert (zwar wahrscheinlich in diesem Fall nicht relevant aber man stelle sich zwei Entwickler vor die verschiedene Anwendungen implementieren die auf der selben DB werkeln), wirkliche Datenkonsistenz kann man sowieso nur auf DB-Ebene erreichen. Sich damit zu beschäftigen und solche Sachen (nach Möglichkeit) von Anfang an in die DB auszulagern ist grundsätzlich keine schlechte Idee (zumindest eine gängige Vorgehensweise).

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

habe nun den geändertes update und meinen insert into befehl in mein programm eingefügt und bekomme beim verusch zu speichern folgene meldung [siehe ahnung].

er springt an folgender stelle aud dem code:


 MySqlCommand command = new MySqlCommand();

                command = new MySqlCommand("insert into t_Abteilungen (Abteilungen,Abteilungsleiter, geaendertam,geaendertvon,erfasstam,erfasstvon) values (?,?, ?geaendertam,?geaendertvon,?erfasstam,?erfasstvon)");
                command.Parameters.Add("?geaendertam", tools.get_datum());
                command.Parameters.Add("?geaendertvon", tools.get_user());
                command.Parameters.Add("?erfasstam", tools.get_datum());
                command.Parameters.Add("?erfasstvon", tools.get_user());           
                da_abteilungen.InsertCommand = command;

                command = new MySqlCommand("update t_Benutzergruppe_Berechtigung  set Abteilungsleiter = ? , geaendertam = ?geaendertam , geaendertvon = ?geaendertvon where Abteilungen = ? ");
                command.Parameters.Add("?geaendertam", tools.get_datum());
                command.Parameters.Add("?geaendertvon", tools.get_user());
                da_abteilungen.UpdateCommand = command;
                             
                MySqlCommandBuilder lv_abt_update = new MySqlCommandBuilder(da_abteilungen);

   /* ->>>> */             da_abteilungen.Update(ds, "Abteilungen");
                        
                MessageBox.Show("Abteilungen erfolgreich bearbeitet !");

Gelöschter Account
vor 16 Jahren

Wichtig: [Hinweis] Wie poste ich richtig?

punkt 5.

außerdem funktioniert es nicht so. woher soll der dataadapter den nwissen wo er die werte aus dem dataset ziehen soll?

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

os sorry, bild is nich im anhng ... wird gleich behoben

[edit]


da_abteilungen = new MySqlDataAdapter(v_sql, con);

                    ds.Clear();
                    da_abteilungen.Fill(ds, "Abteilungen");
                    dataGridView1.DataSource = ds;
                    dataGridView1.DataMember = "Abteilungen";


Gelöschter Account
vor 16 Jahren

ja das kann auch nciht funktionieren.

versuch doch mal den weg: da_abteilungen.UpdateCommand.ExecuteNonQuery();

ps: connection öffnen und schließen nicht vergessen....

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

die connection ist beim ausführen der executes bereits geöffnet, aber schmeißt mich trotzdem in den catch mit: "The connection must be valid and open "

Gelöschter Account
vor 16 Jahren

debuggen. so wie ich das sehe, hast du noch kein einziges mal wirklich gedebugged. setz einen breakpoint auf das update und schau in der variable nach ob die connection geöffnet ist oder nicht. (ich glaube sie ist es nicht.)

und wenn du executenonquerry benutzt musst du sie per hand aufmachen. wie das geht, schaust du am besten hier im forum unter "Artikel" oder "FAQ" nach.

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

habe schon gedebugged, die verbindung ist offen 😉 und wenn ich vor die 2 befehle ein con.open setze , sagt mir das der debugger ("the connection is already open!")

Gelöschter Account
vor 16 Jahren

der insert geht, aber das update nicht?

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

beide nicht, selbe fehlermeldung

Gelöschter Account
vor 16 Jahren

passt der connectionstring?

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

ja, der er auch überall sonst z.b. beim laden beutzt wird, ich hba eher die ermutung, dass ich diesem updatecommand noch die connection übergeben muss, was ich bis jetzt nicht habe und auhc nich weiß wo ...

Gelöschter Account
vor 16 Jahren

da_abteilungen.UpdateCommand.Connection

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

das is heute nicht mein tag =(

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

ok das connectionproblem is damit gelöst... aber das ganze is noch nich fertig =( ... eine mit genzlichn unbekkannte fehlermeldung :

"Der Index, basierend auf 0 (null), muss größer als oder gleich Null sein, und kleiner als die Größe der Argumentenliste."

Gelöschter Account
vor 16 Jahren
da_abteilungen.Update(ds, "Abteilungen");

geht so nicht.

ja das kann auch nciht funktionieren.

versuch doch mal den weg: da_abteilungen.UpdateCommand.ExecuteNonQuery();

ps: connection öffnen und schließen nicht vergessen....

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

habs schon ersetzt, .... kann nur jetzt kein code posten da ich @ home bin und das program ncih mitgenommen hab

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

guten morgen erstmal 🙂

mein jetziger stand :


 MySqlCommand command = new MySqlCommand();

                command = new MySqlCommand("insert into t_Abteilungen (Abteilungen,Abteilungsleiter, geaendertam,geaendertvon,erfasstam,erfasstvon) values (?,?, ?geaendertam,?geaendertvon,?erfasstam,?erfasstvon)");
                command.Parameters.Add("?geaendertam", tools.get_datum());
                command.Parameters.Add("?geaendertvon", tools.get_user());
                command.Parameters.Add("?erfasstam", tools.get_datum());
                command.Parameters.Add("?erfasstvon", tools.get_user());           
                da_abteilungen.InsertCommand = command;

                command = new MySqlCommand("update t_Benutzergruppe_Berechtigung  set Abteilungsleiter = ? , geaendertam = ?geaendertam , geaendertvon = ?geaendertvon where Abteilungen = ? ");
                command.Parameters.Add("?geaendertam", tools.get_datum());
                command.Parameters.Add("?geaendertvon", tools.get_user());
                da_abteilungen.UpdateCommand = command;
                             
                MySqlCommandBuilder lv_abt_update = new MySqlCommandBuilder(da_abteilungen);

                da_abteilungen.InsertCommand.Connection = con;
                da_abteilungen.UpdateCommand.Connection = con;
              
         ==>da_abteilungen.InsertCommand.ExecuteNonQuery();
                da_abteilungen.UpdateCommand.ExecuteNonQuery();
               
                            
                MessageBox.Show("Abteilungen erfolgreich bearbeitet !")

doch leider kommt "hier" (siehe code ) immernoch folgende fehlermeldung, die mir bisher völlig unbekannt war :

"Der Index, basierend auf 0 (null), muss größer als oder gleich Null sein, und kleiner als die Größe der Argumentenliste."

weshalb kommt diese meldung, hat sie jemand schonmal gehabt / gelöst ?

MfG

Dex

Gelöschter Account
vor 16 Jahren

bist du dir sicher, das du einfach ein ? in den statements verwenden kannst?

J
3.331 Beiträge seit 2006
vor 16 Jahren

Hallo,

ich habe jetzt nicht alle Deine Versuche genauer verfolgt. Aber in Deinem neuesten Code sehe ich folgende Fehler:

"command" wird durch "new" mehrfach neu erzeugt. Das ist für sich genommen kein Fehler, hat aber Auswirkungen. Nach jedem "new" hast Du über die Variable "command" keinen Zugriff mehr auf die vorherigen Festlegungen.

Der erste neue "command" wird nur erzeugt, aber nicht benutzt.

Der zweite neue "command" (insert) enthält 2 Parameter ohne Namen und 4 Parameter mit Namen; in der Parameters-Liste werden 4 Parameter zugewiesen.

Der dritte neue "command" (update) enthält 2 Parameter ohne Namen und 2 Parameter mit Namen; in der Parameters-Liste werden 2 Parameter zugewiesen.

Für den MySqlCommandBuilder sehe ich hier keinen Sinn.

Ich hoffe zusätzlich, dass die Syntax des MySql-Providers für Parameters.Add so korrekt ist: Werden '?' verwendet? Können die Parameter wahlweise Namen enthalten oder auch nicht? Werden mit Add automatisch Werte eingetragen (üblich ist dafür AddWithValue)?

Ergänzend empfehle ich dringend, ExecuteNonQuery in try-catch einzubinden und die Exception mit ex.ToString() genau abzufragen. try-catch gehört sich an dieser Stelle IMMER! Mit ex.ToString() erhältst Du ziemlich genau Informationen über den Fehler.

Gruß Jürgen

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

mahlzeit jack30lena, juetho

erstmal danke für eure posts !

werde mich nu gleich an die verbesserung der von euch beschrieben probleme machen!

zu den '?' werde ich mich auch gleich schlau machen, dazu jedoch eine frage :

wenn ich meine geschichte auf einer acces db anwenden möchte, dann ist es kein '?' sonder ein '@' oder?

MfG dex

Gelöschter Account
vor 16 Jahren

korrekt.

übrigens ist ein ? ein platzhalter. den wert brauchst du trotzdem. und du musst selbstverständlich den parameter auch mit angeben. unter anderem empfehle ich dir den platzhalter immer einen eindeutigen namen zu geben.

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

muss ich , wenn ich ich mit diesem command die gesamte tabelle updazten willen jeden einzelnen wert holen, speichern und dann per parameter in den sql einbinden, oder wie läuft das ?

Gelöschter Account
vor 16 Jahren

jain.

weg1:
du holst dir die tabelle und baust pro zeile so ein command zusammen und führst ihn aus.
weg2:
du verwendest einen dataadapter der die geamte tabelle unterstützt.(am anfang am besten den designer hierfür verwenden und schauen wie dieser das macht)

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

was wäre deiner meinung nach sinnvoller?!

Gelöschter Account
vor 16 Jahren

in meinen projekten war weg1 immer sinnvoller, da ich nciht fixe abfragen und inserts hatte.. das war meist komplizierter.

weg 2 ist gut wenn man eine starre abfrage bzw tabelle hat, die sowieso immer die gleichen columns hat.

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

hat sie, nur habe ich halt das problem, dass sich beim update nicht alle felder updaten sollen , sondern nur die felder ( die der benutzer sieht ) und die "geaendertam" und "geaendertvon" felder ....

ich glaube ,dass ich dann am besten den 1. weg wähle ... dann muss ich aber wieder mit juetho verhassten " Datagridview.Rows[].Cells[].Vlaue " arbeiten.

J
3.331 Beiträge seit 2006
vor 16 Jahren

... dann muss ich aber wieder mit juetho verhassten " Datagridview.Rows[].Cells[].Vlaue " arbeiten.

Geht es darum, ob ich etwas hasse? 😁

Schlecht ist es, wenn für einen DbCommand auf die Werte eines DataGridView zugegriffen wird oder wenn überflüssigerweise mit ToString gearbeitet wird.

Gut ist es, wenn auf die dahinterliegende Datenmenge zugegriffen wird und wenn mit den "wirklichen" Datentypen gearbeitet wird.

Und es muss doch möglich sein, beides korrekt zu verwenden. Jürgen

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

nen geht nich um deinen hass ^^

bestimmt gehen beide möglichkeiten "irgendwie" ... nur welche ist sinnvoller und vorallem schneller einzubinden ....

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

so nach einer bastelei ( ist ja eh balt ostern ^^ ) hab ihc un dashier gebaut:



for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                {
                    updatecmd = new MySqlCommand("update t_Abteilungen set Abteilungsleiter = @Abteilungsleiter , geaendertam = @geaendertam , geaendertvon = @geaendertvon where Abteilungen = @Abteilungen ");

                    updatecmd.Parameters.Add("@Abteilungsleiter",  dataGridView1.Rows[i].Cells[1].Value.ToString());
                    updatecmd.Parameters.Add("@Abteilungen", dataGridView1.Rows[i].Cells[0].Value.ToString());

                    updatecmd.Parameters.Add("@geaendertam", tools.get_datum());
                    updatecmd.Parameters.Add("@geaendertvon", tools.get_user());
                    da_abteilungen.UpdateCommand = updatecmd;


                    
                    da_abteilungen.UpdateCommand.Connection = con;

                    try
                    {
                       
                        da_abteilungen.UpdateCommand.ExecuteNonQuery();
                    }
                    catch (Exception x)
                    {
                        MessageBox.Show("" + x);
                    }
                }
                            
                MessageBox.Show("Abteilungen erfolgreich bearbeitet !");


intereassant ist, dass es ohne problem funktioniert( keine f-meldung) aber die daten trotzdem nicht updatet =/

Gelöschter Account
vor 16 Jahren

schließt du die connection anschließend auch wieder?

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

es geht, ich glaub nicht =0 es geht:


da_abteilungen.UpdateCommand.Connection = con;
                da_abteilungen.UpdateCommand.Connection.Open();
                for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                {
                    updatecmd = new MySqlCommand("update t_Abteilungen set Abteilungsleiter_bez = ?Abteilungsleiter_bez , geaendertam = ?geaendertam , geaendertvon = ?geaendertvon where Abteilungen = ?Abteilungen ");

                    updatecmd.Parameters.Add("?Abteilungsleiter_bez",  dataGridView1.Rows[i].Cells[1].Value.ToString());
                    updatecmd.Parameters.Add("?Abteilungen", dataGridView1.Rows[i].Cells[0].Value.ToString());

                    updatecmd.Parameters.Add("?geaendertam", tools.get_datum());
                    updatecmd.Parameters.Add("?geaendertvon", tools.get_user());
                    da_abteilungen.UpdateCommand = updatecmd;

                  try
                    {
                       
                        da_abteilungen.UpdateCommand.ExecuteNonQuery();
                       
                    }
                    catch (Exception x)
                    {
                        MessageBox.Show("" + x);
                    }
                    
                }
                da_abteilungen.UpdateCommand.Connection.Close();           
                MessageBox.Show("Abteilungen erfolgreich bearbeitet !");

top leistung Jack, vielen dank für die hilfe !!!!!

Gelöschter Account
vor 16 Jahren

na sowas höre ich doch gerne 🙂

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

da hat sich ein kleiner fehler eingeschlichen . schlussendlich der code:


private void button5_Click(object sender, EventArgs e)
        {
            try
            {

                for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                {
                    updatecmd = new MySqlCommand("update t_Abteilungen set Abteilungsleiter_bez = ?Abteilungsleiter_bez , geaendertam = ?geaendertam , geaendertvon = ?geaendertvon where Abteilungen = ?Abteilungen ");
               
                    updatecmd.Parameters.Add("?Abteilungsleiter_bez",  dataGridView1.Rows[i].Cells[1].Value.ToString());
                    updatecmd.Parameters.Add("?Abteilungen", dataGridView1.Rows[i].Cells[0].Value.ToString());

                    updatecmd.Parameters.Add("?geaendertam", tools.get_datum());
                    updatecmd.Parameters.Add("?geaendertvon", tools.get_user());
                    da_abteilungen.UpdateCommand = updatecmd;
                    da_abteilungen.UpdateCommand.Connection = con;
        
                  try
                    {
                       
                        da_abteilungen.UpdateCommand.ExecuteNonQuery();
                        da_abteilungen.UpdateCommand.Connection.Close();  
                    }
                    catch (Exception x)
                    {
                        MessageBox.Show("" + x);
                    }
                    da_abteilungen.UpdateCommand.Connection.Open();
                }
                         
                MessageBox.Show("Abteilungen erfolgreich bearbeitet !");

            }
            catch (Exception f) { MessageBox.Show("Speichern nicht möglich: " + f); }

        }

[edit]
tippfehler 😉

[/edit]

Gelöschter Account
vor 16 Jahren
try
                    {

                        da_abteilungen.UpdateCommand.ExecuteNonQuery();
                        da_abteilungen.UpdateCommand.Connection.Close();
                    }
                    catch (Exception x)
                    {
                        MessageBox.Show("" + x);
                    }
                    da_abteilungen.UpdateCommand.Connection.Open();

das musst du überarbeiten.

bau eine prüfung ein ob die connection bereits offen ist, bevor du das statement ausführst.
anschließend schließe sie wieder.

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

hatte ich drinnen, wenn ich meine tabpage wechsle und wieder zurück gehe spingt er raus ( " Connection must be valid an open" ) wenn ich so mache wie jjetzt ,dann gehts -.-

D
Dexter323 Themenstarter:in
89 Beiträge seit 2008
vor 16 Jahren

ich fühl mich iwie von diesem datagridview verarscht =/ !

ich hatte mich so gefreut, dass die geschichte mit dem update funktioniert, dass ich mich heute voller tatendrang an den insert into machn wollte .... tja nach 10 minuten war ende im gelände! Das Problem :

Ich kann NICHT auf einen Wert , den ich neu in die "Neue hinzugefügte Spalte" schreibe , zugreifen. Drer Catch liefert mir die schöne Fehlermeldung " Der Objektverweis wurde nicht.... usw."

Ich spiele langsam mit dem gedanken mit eine listview zu arbeiten, damit hätte ich diese probleme alle nicht -.-

sollte ich das wirklich tun / mit was würdet ihr das an meiner stelle realisieren ?

Mfg Dex

J
3.331 Beiträge seit 2006
vor 16 Jahren

Ich spiele langsam mit dem gedanken mit eine listview zu arbeiten, damit hätte ich diese probleme alle nicht -.-

sollte ich das wirklich tun / mit was würdet ihr das an meiner stelle realisieren ?

Ich kann mich nur wiederholen - siehe 07.03.2008 14:11:

Gut ist es, wenn auf die dahinterliegende Datenmenge zugegriffen wird und wenn mit den "wirklichen" Datentypen gearbeitet wird.

Deine Probleme entstehen in erster Linie dadurch, dass Du nicht mit den eigentlichen Daten arbeitest, sondern mit ihrer Darstellung. (Mir ist klar, dass Dir diese Feststellung nicht hilft; deshalb verstehe ich sie halb als "off-topic" und habe sie ausgegraut.) Jürgen