Zum Inhalt springen

Datenbank bearbeiten


Empfohlene Beiträge

Geschrieben

Hallo ihr,

dies ist mein erster Beitrag hier im Forum, also bitte entschuldigt eventuelle formale Fehler und co. ;)

Also ich bin im ersten Jahr als Fachinformatiker tätig und habe nun ein Problem.

Ich habe eine Datenbank in der Daten über Personen stehen. Da diese bald für eine Präsentation sichtbar werden, muss ich diese nun verändern aufgrund von Datenschutzrichtlinien. Primär geht es mir darum, dass ich Vorname und Nachname änder, bzw. ganz einfach die Spalte Nachnamen von unten nach oben Schreibe. Dies hab ich auch ganz gut hinbekommen, allerdings krieg ich die Daten jetzt nicht mehr in die Datenbank hinein (Access Datenbank).

Also ich will jetzt in die selbe Datenbank schreiben!!!

Hier erstmal der Quellcode:


                da.Fill(changer, "Kind_ID");

                da.Fill(changer, "K_Vorname");

                da.Fill(changer, "K_Name");





                dtRichtig = changer.Tables["Kind_ID"];

                dtRichtig = changer.Tables["K_Vorname"];

                dtRichtig = changer.Tables["K_Name"];



                if (dtRichtig.Rows[0][0].ToString().Length > 0)

                {

                    iPrimaryID = (int)dtRichtig.Rows[0][0] + 1;

                }

                else

                {

                    iPrimaryID = 1;

                }



                int iAnzahl = dtRichtig.Rows.Count;                


                for(int i=1;i<iAnzahl;i++) 

                {

                    DataRow dwChanger = dtRichtig.NewRow();

                    dwChanger["K_Vorname"]=changer.Tables["K_Vorname"].Rows[i]["K_Vorname"];

dwChanger["K_Name"] = changer.Tables["K_Name"].Rows[iAnzahl - i]["K_Name"];


                    dtRichtig.Rows.Add(dwChanger);

                    da.InsertCommand = ocb2.GetInsertCommand();

                    iPrimaryID++;

                }
So eingentlich woltle ich nichts mit dem Primarykey machen, also mit der Kind_ID. Aber nachdem ich den Fehler bekommen habe, dass der Primarykey doppelt ist, habe ich einen eingefügt. Jetzt bekomme ich bei der Primarykey abfrage, folgenden Fehler:
Die angegebene Umwandlung ist ungültig

Ich denk das ist ein kleiner fehler, allerdings hab ich solangsam bedenken, dass der Code generell falsch ist...

Ich hoffe ihr könnt mir helfen...

VIELEN DANK schonmal !!!

Gruß

DeLow

Geschrieben (bearbeitet)

Dazu kommt noch, das er einen Eintrag schreibt. Sowie ich das haben will... FAST!

Irendwie setzt er die Daten KOMPLETT NEU anstatt zu Verändern...

Ich will halt die alten Daten genauso lassen, nur die Spalte "K_Name" ändern...

hab jetzt bisschen was verändert.. hier nochmal

              

          da.Fill(changer, "K_Name");


                CopyDataSet(changer);



                dtRichtig = changer.Tables["K_Name"];                   


                int iAnzahl = dtRichtig.Rows.Count;                


                for(int i=1;i<iAnzahl;i++) 

                {

                    dtRichtig = changer.Tables["K_Name"].Rows[iAnzahl - i]["K_Name"];                   

                    //dwChanger["K_Name"] = changer.Tables["K_Name"].Rows[iAnzahl - i]["K_Name"];



                    da.InsertCommand = ocb2.GetInsertCommand();                    

                }



                da.Update(dtRichtig);

                da.Dispose();                

                conn.Close();


Was mache ich falsch... jetzt kommt auch ein andere Fehler..
ERROR[23000][MYSQL][ODBC 3.51 Driver][mysqld-5.1.30-communitiy]Duplicate entry '0' for key 'PRIMARY'

Ich hab echt keine Ahnung was das soll? Vielleicht ein Copy vom DataSet machen? Allerdings hab ich davon keine Ahnung und versteh nur schlecht wie das gehen soll laut msdn. Ich hab echt keine Ahnung:(

Bitte HILFE!!!

Bearbeitet von Delow
Geschrieben (bearbeitet)

Ist dir eigentlich der Unterschied zwischen einem INSERT und einem UPDATE klar?

<edit>

Und außerdem paßt die ODBC-Fehlermeldung nicht wirklich zu MS-Access.

</edit>

Bearbeitet von grueni
Geschrieben (bearbeitet)

Okay stimmt... ziemlich dummer Fehler von mir.

Ja Update brauch ich ja...

Dann hab ich jetzt eine andere Frage...

Ich will ja jetzt die Daten aktualisieren. Ist eine for-schleife die bessere oder die foreach? Mit foreach hab ich das Problem, dass ich die datarow verwenden will, aber man darf ja nicht die Collections einer foreach schleife verändern.

Jetzt besteht mein Fehler hier:


 for(int i=1;i<iAnzahl;i++)

                {

                    DataRow dw;

                    dw = dtRichtig.NewRow();

                    dw["K_Name"]=changer.Tables["K_Name"].Rows[iAnzahl - i]["K_Name"];             

                }



                da.Update(dtRichtig);

                da.Dispose();                

                conn.Close();

            }

Bearbeitet von Delow
Geschrieben

Hi,

mir fallen viele Dinge auf die nicht ganz rund sind an dem Code (aber es ist gut das du den SQL Code nicht von Hand generierst!)

* Auf den DataAdapter brauchst du nicht Dispose aufzurufen, das passiert automatisch wenn die Referenz aus dem aktuellen Scope läuft

* conn.Close brauchst du nicht aufrufen sofern du die Connection nicht vorher mit Open geöffnet hast. Wenn die Connection im State Closed ist macht der DataAdapter sie automatisch selbst auf und schließt sie auch wieder.

* Die ganze Ressourcenbereinigung sollte in einem finally Block geschehen, ideal ist hierfür das using-Schlüsselwort

Das sind aber nur Kleinigkeiten, dein Code in der for-Schleife macht keinen Sinn weil die neue DataRow bei jedem Durchlauf wieder überschrieben wird. Willst du die neue Row in das Dataset einfügen dann musst du noch die Add Methode des Datasets aufrufen.

Deine Frage hast du schon selbst beantwortet. Wenn du in einer Schleife die Collection selbst ändern willst ist eine foreach Schleife nicht geeignet.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...