Autor |
Beitrag |
Orothred
Beiträge: 86
C# (VS 2005)
|
Verfasst: Do 27.09.07 14:44
Hi!
Ich möchte die Inhalte von mehreren Textfeldern in eine Datenbank schreiben. Wie mache ich das? Folgende Zeile bringt mir einen Laufzeitfehler:
Quelltext 1:
| string strSQL = "INSERT INTO Adressen(Name, Vorname, Straße, Ort, PLZ, Telefon, Email, Geburtstag) VALUES(txtName.Text, txtVorname.Text, txtStrasse.Text, txtOrt.Text, txtPLZ.Text, txtTelefon.Text, txtemail.Text, txtGeburtstag.Text)"; |
|
|
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: Do 27.09.07 16:16
Orothred hat folgendes geschrieben: | Hi!
Ich möchte die Inhalte von mehreren Textfeldern in eine Datenbank schreiben. Wie mache ich das? Folgende Zeile bringt mir einen Laufzeitfehler:
Quelltext 1:
| string strSQL = "INSERT INTO Adressen(Name, Vorname, Straße, Ort, PLZ, Telefon, Email, Geburtstag) VALUES(txtName.Text, txtVorname.Text, txtStrasse.Text, txtOrt.Text, txtPLZ.Text, txtTelefon.Text, txtemail.Text, txtGeburtstag.Text)"; | |
Und welchen Laufzeitfehler? Sollen wir raten?
Allgemeine Anleitung dazu steht im OpenBook Visual C# Kap.26.
Dein Vorgehen ist sowieso nicht sauber; darauf wird leider in solchen Anleitungen zu wenig eingegangen. Benutze unbedingt Parameter:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| string strSQL = "INSERT INTO Adressen " + "(Name, Vorname, Straße, Ort, PLZ, Telefon, Email, Geburtstag) " + "VALUES(@Name, @Vorname, @Strasse, @Ort, @PLZ, @Telefon, @Email, @Geburtstag)"; SqlCommand cmd = new SqlCommand(strSQL); cmd.Parameters.AddWithValue(@Name, txtName.Text); cmd.Parameters.AddWithValue(@Vorname, txtVorname.Text); cmd.Parameters.AddWithValue(@Geburtstag, txtGeburtstag.Text); DateTime geburtstag = Convert.ToDateTime(txtGeburtstag.Text); cmd.Parameters.AddWithValue(@Geburtstag, geburtstag); |
Kurze Begründung: überflüssige Konvertierung vermeiden, notwendige Konvertierung vom Framework erledigen lassen, Schreibweise für Datum/Zeit ist für Dich nebensächlich, keine Sql-Injection möglich. Nachteil: Die Schreibweise der Parameter hängt vom DbProvider ab.
Gruß Jürgen
PS. Zusätzliche CR/LF in langen Zeilen verbessern die Lesbarkeit.
Nachtrag: BBCode "Code" durch "CS" ersetzt; das kommt dabei heraus, wenn man Text nur kopiert statt selbst schreibt.
Zuletzt bearbeitet von JüTho am Fr 28.09.07 08:53, insgesamt 1-mal bearbeitet
|
|
Orothred
Beiträge: 86
C# (VS 2005)
|
Verfasst: Do 27.09.07 16:42
ok, danke für den tipp mit den parametern
|
|
Kha
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Do 27.09.07 17:38
JüTho hat folgendes geschrieben: | PS. Zusätzliche CR/LF in langen Zeilen verbessern die Lesbarkeit. |
Nur ein kleiner Zusatz, da oft übersehen: Verbatim-Strings können mehrere Zeilen umfassen.
C#-Quelltext 1: 2: 3: 4:
| string strSQL = @"INSERT INTO Adressen (Name, Vorname, Straße, Ort, PLZ, Telefon, Email, Geburtstag) VALUES(@Name, @Vorname, @Strasse, @Ort, @PLZ, @Telefon, @Email, @Geburtstag)"; |
|
|
|