Sql Server Compact - Speicher Problem beim hinzufügen

newcode

Grünschnabel
hi, ich möchte gerne eine datenbank mit Sql Server Compact erstellen, nun beim hinzufügen der db-Einträge gehts nicht richtig, wobei ich nicht weiterkomme.

Code:
Imports System.Data.SqlServerCe
Public Class frmTest
Dim con As New SqlCeConnection
Dim cmd As New SqlCeCommand
Dim reader As SqlCeDataReader

Private Sub frmTest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub cmdShow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdShow.Click
ShowAll()
End Sub
Private Sub ShowAll()
con.ConnectionString = "Data Source=firma.sdf"
cmd.Connection = con
cmd.CommandText = "select * from personen"
con.Open()

reader = cmd.ExecuteReader
lstTab.Items.Clear()

Do While reader.Read()

lstTab.Items.Add(reader("name") & ":" & reader("vorname"))

Loop
con.Close()
End Sub

]Private Sub cmdAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAdd.Click
Dim anzahl As Integer
con.ConnectionString = "Data Source=firma.sdf"
cmd.Connection = con
cmd.CommandText = "insert into personen " & "(name, vorname, personalnummer, gehalt, geburtstag) " & _
"values ('" & txtName.Text & "', '" & txtPass.Text & "', '" & "123" & "', '" & "15" & "', '" & "3.1.1991" & "')"
con.Open()
MessageBox.Show(cmd.CommandText)

anzahl = cmd.ExecuteNonQuery()

If anzahl > 0 Then
MsgBox("Es wurde ein Datensatz eingefügt")
con.Close()
End If
con.Close()

ShowAll()
End Sub
End Class
*um das gefärbte gehts ;)

Nun wenn ich etwas hinzufügen möchte erscheint es in der listbox (das es hinzugefügt wurde...) aber es wird nicht gespeichert:
- wenn ich das debuggen schliesse und wieder starte und auf "cmdShow" klickt kommen die schon eingetragenen einträge also nicht den neu hinzugefügten.
- wenn ich auf Personen->"Tabellendaten anzeigen" gehe sind da nur die schon "eingetragenen" drin...

wie kann man das ganze "Speichern" .. damit es in der datenbank bleibt?

hier noch etwas:

tabelleneigenschaften.jpeg.png


beim hinzufügen:
Code:
insert into personen (name, vorname, personalnummer, gehalt, geburtstag) values ('test', 'hallo', '123', '15', '3.1.1991')

*ein anderer hat mir folgendes gesagt:
Die Felder Gehalt, Personalnummer und Geburtstag sind keine Textfelder. Zumindest für Gehalt und Personalnummer gilt keine Anführungszeichen im INSERT.
 
Zuletzt bearbeitet:
Hallo newcode,

Da ich die Datenbank bzw. deren Struktur nicht kenne, kann ich auch nicht sagen, welche Anführungszeichen da rein müssen und welche nicht.

Was ich jedoch grundsätzlich empfehlen würde, auch aus sicherheitstechnischer Sicht, ist die Verwendung von Parametern in der Abfrage.

Code:
cmd.CommandText = "insert into personen " & "(name, vorname, personalnummer, gehalt, geburtstag) " & _
"values ('" & txtName.Text & "', '" & txtPass.Text & "', '" & "123" & "', '" & "15" & "', '" & "3.1.1991" & "')"

ändern in:

cmd.CommandText="INSERT INTO personen (name,vorname,personalnummer, ...) VALUES (@val1,val2,@val3,...)"
cmd.Parameters.Add("@val1",Sqldbtype.String).Value= txtName.Text 
cmd.Parameters.Add("@val2",Sqldbtype.String).Value= txtPass.Text
cmd.Parameters.Add("@val2",Sqldbtype.Integer).Value= Integer.Parse("123") 'wenn schon text dann richtig parsen
cmd.ExecuteNonQuery
Damit haben die eingegebenen Werte das richtige Format für die Datenbank und du musst dich selber nicht mit Anführungszeichen und ähnlichem herumschlagen.
Um das durchzuführen musst du natürlich wissen,welchen Datentyp das jeweilige DB-Feld akzeptiert.

Edit: Das Bild kann man nicht sehen - zu klein, selbst bei Vergrößerung imFirefox.
 
Zuletzt bearbeitet:
Zurück