martinposer Geschrieben 4. August 2011 Teilen Geschrieben 4. August 2011 Hallo, folgendes Problem: Ich habe eine lokale Datenbank erstellt, der Benutzer soll seine Daten in dieser speichern können. Da der Benutzer seine Daten immer nur verändern kann und er nicht doppelt in der Datenbank stehen soll, arbeite ich mit dem SQL Befehl update. Allerdings funktioniert das einfügen nicht obwohl mir keine Fehlermeldung angezeigt wird. Dim con As New SqlServerCe.SqlCeConnection Dim cmd As New SqlServerCe.SqlCeCommand cmd.Connection = con con.ConnectionString = "Data Source = Azubi_Daten.sdf" Try con.Open() 'Die eingetragenen Daten werden in die Datenbank importiert. cmd.CommandText = "update Datenpflege set Name = @Name" cmd.CommandText = "update Datenpflege set Geburtsdatum = @Geburtsdatum" cmd.CommandText = "update Datenpflege set Geburtsort = @Geburtsort" cmd.CommandText = "update Datenpflege set Beruf = @Beruf" cmd.CommandText = "update Datenpflege set Berufsschule = @Berufsschule" cmd.CommandText = "update Datenpflege set Ausbildungszeit =@Ausbildungszeit" cmd.CommandText = "update Datenpflege set Anschrift = @Anschrift" cmd.CommandText = "update Datenpflege set Betrieb = @Betrieb" 'Über Parameter werden die Spalten mit Werten gefüllt cmd.Parameters.AddWithValue("Name", txtName.Text) cmd.Parameters.AddWithValue("Geburtsdatum", txtBirth.Text) cmd.Parameters.AddWithValue("Geburtsort", txtOrt.Text) cmd.Parameters.AddWithValue("Beruf", txtJob.Text) cmd.Parameters.AddWithValue("Berufsschule", txtSchool.Text) cmd.Parameters.AddWithValue("Ausbildungszeit", txtTime.Text) cmd.Parameters.AddWithValue("Anschrift", txtAnschrift.Text) cmd.Parameters.AddWithValue("Betrieb", txtFirma.Text) cmd.ExecuteNonQuery() Catch ex As Exception MsgBox(ex.Message) End Try con.Close() Habt ihr vielleicht eine Idee? Vielen Dank :-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
eifeljeti66 Geschrieben 4. August 2011 Teilen Geschrieben 4. August 2011 Mit cmd.Parameters.AddWithValue("@Name", txtName.Text) usw. müsste es gehen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
martinposer Geschrieben 4. August 2011 Autor Teilen Geschrieben 4. August 2011 Das funktioniert leider nicht Mein reader dazu sieht so aus: Dim con As New SqlServerCe.SqlCeConnection Dim cmd As New SqlServerCe.SqlCeCommand Dim reader As SqlServerCe.SqlCeDataReader cmd.Connection = con con.ConnectionString = "Data Source = Azubi_Daten.sdf" Try con.Open() cmd.CommandText = "select * from Datenpflege" reader = cmd.ExecuteReader Do While reader.Read 'Auslesen der Persönlichen Daten txtName.Text = reader("Name") txtBirth.Text = reader("Geburtsdatum") txtAnschrift.Text = reader("Anschrift") txtOrt.Text = reader("Geburtsort") 'Auslesen der Ausbildungsdaten txtFirma.Text = reader("Betrieb") txtJob.Text = reader("Beruf") txtSchool.Text = reader("Berufsschule") txtTime.Text = reader("Ausbildungszeit") Loop Catch ex As Exception MsgBox(ex.Message) End Try con.Close() Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sacaldur Geschrieben 5. August 2011 Teilen Geschrieben 5. August 2011 ich sehe das Problem darin, dass der alte Befehl durch einen immer wieder neuen ersetzt wird (kann auch sein, dass ich mich irre) ändert sich denn zumindest der Betrieb? wenn ja, dann musst du jedes Mal, wenn du "cmd.CommandText = [...]" verwendest vor dem jeweilig nächsten ein "cmd.ExecuteNonQuery()" verwenden, damit auch _jeder_ Befehl ausgeführt wird Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gateway_man Geschrieben 5. August 2011 Teilen Geschrieben 5. August 2011 ich sehe das Problem darin, dass der alte Befehl durch einen immer wieder neuen ersetzt wird (kann auch sein, dass ich mich irre) ändert sich denn zumindest der Betrieb? wenn ja, dann musst du jedes Mal, wenn du "cmd.CommandText = [...]" verwendest vor dem jeweilig nächsten ein "cmd.ExecuteNonQuery()" verwenden, damit auch _jeder_ Befehl ausgeführt wird Seh ich auch so. Er überschreibt seinen querrystring ständig ohne den vorherigen ausgeführt zu haben. Entweder einen nach dem andern ausführen (wie von Sacaldur bereits erklärt) oder zu einem einzigen Update Statement zusammenfassen (was ich persönlich für die elegantere Lösung halten würde). Dann sollte das auch funktionieren. lg Gateway Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
martinposer Geschrieben 5. August 2011 Autor Teilen Geschrieben 5. August 2011 Vielen Dank für eure Hilfe. Hab das Problem jetzt gelöst, habe die Parameterangaben vor dem Commandtext ersetzt und update durch insert ersetzt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sacaldur Geschrieben 5. August 2011 Teilen Geschrieben 5. August 2011 Seh ich auch so. Er überschreibt seinen querrystring ständig ohne den vorherigen ausgeführt zu haben. Entweder einen nach dem andern ausführen (wie von Sacaldur bereits erklärt) oder zu einem einzigen Update Statement zusammenfassen (was ich persönlich für die elegantere Lösung halten würde). Dann sollte das auch funktionieren. lg Gateway stimmt, daran habe ich nicht gedacht sofern nur ein einziger Datensatz verändert werden soll, ist das defenitiv besser aber... naja... in dem Fall kann ich kein "WHERE" sehen, wodurch der zu ändernde Datensatz bestimmt wird (es sei denn, VB kennt sowas nicht ;D) das heißt, jedes Mal würden einfach alle Datensätze so angepasst werden ^^ @martinposer: du _musst_ eine WHERE Klausel einfügen, wenn du nur einen einzigen Datensatz ändern willst Vielen Dank für eure Hilfe. Hab das Problem jetzt gelöst, habe die Parameterangaben vor dem Commandtext ersetzt und update durch insert ersetzt. ein Insert wird dir nichts bringen, wenn du Daten verändern willst du würdest also immer wieder einen neuen Datensatz einfügen und genau das ist doch das, was du nicht haben wolltest, oder? wenn erst durch das Insert dein Ziel "erreicht" ist, dann waren einfach keine Datensätze in der Tabelle, weshalb auch keine Datensätze aktualisiert werden konnten diesen Fall solltets du prüfen, indem du vorher in der Datenbank nachschaust, ob schon ein Datensatz vorhanden ist wenn ja -> UPDATE wenn nein -> INSERT (irgendein DBMS bzw. ABAP hatte einen Befehl verwendet, welches eine Kombination aus den beiden darstellt...) Fazit: du hast dein altes Problem lösen können, aber dafür ein neues aufgeworfen ;D Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Chiacomo Geschrieben 8. August 2011 Teilen Geschrieben 8. August 2011 Hi, falls es noch interessant ist für dich, ich würds so machen Dim con As New SqlServerCe.SqlCeConnection Dim cmd As New SqlServerCe.SqlCeCommand cmd.Connection = con con.ConnectionString = "Data Source = Azubi_Daten.sdf" Try con.Open() 'Die eingetragenen Daten werden in die Datenbank importiert. cmd.CommandText = "update Datenpflege set Name = @Name, " _ & "Geburtsort = @Geburtsort, " _ & "Beruf = @Beruf, " _ & "Berufsschule = @Berufsschule, " _ & "Ausbildungszeit = @Ausbildungszeit, " _ & "Anschrift = @Anschrift, " _ & "Geburtsdatum = @Geburtsdatum, " _ & "Betrieb = @Betrieb" cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 250) cmd.Parameters.Add("@Geburtsdatum", SqlDbType.NVarChar, 250) cmd.Parameters.Add("@Geburtsort", SqlDbType.NVarChar, 250) cmd.Parameters.Add("@Beruf", SqlDbType.NVarChar, 250) cmd.Parameters.Add("@Berufsschule", SqlDbType.NVarChar, 250) cmd.Parameters.Add("@Ausbildungszeit", SqlDbType.NVarChar, 250) cmd.Parameters.Add("@Anschrift", SqlDbType.NVarChar, 250) cmd.Parameters.Add("@Betrieb", SqlDbType.NVarChar, 250) cmd.Parameters("@Name").Value = txtName.Text cmd.Parameters("@Geburtsdatum").Value = txtBirth.Text cmd.Parameters("@Geburtsort").Value = txtOrt.Text cmd.Parameters("@Beruf").Value = txtJob.Text cmd.Parameters("@Berufsschule").Value = txtSchool.Text cmd.Parameters("@Ausbildungszeit").Value = txtTime.Text cmd.Parameters("@Anschrift").Value = txtAnschrift.Text cmd.Parameters("@Betrieb").Value = txtFirma.Text cmd.ExecuteNonQuery() Catch ex As Exception MsgBox(ex.Message) End Try con.Close() gibt zwar tausend weg zum ziel und dieser ist gestimmt ein bisschen ausführlich, aber was solls. bei mir liefs so. die datentypen musst du natürlich noch an deine anpassen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.