Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Inhalte von Textboxen in Datenbank schreiben


Orothred - Do 27.09.07 14:44
Titel: Inhalte von Textboxen in Datenbank schreiben
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 - Do 27.09.07 16:16
Titel: Re: Inhalte von Textboxen in Datenbank schreiben
user profile iconOrothred 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 [http://www.galileocomputing.de/openbook/visual_csharp/].

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);
//  und hier tritt höchstwahrscheinlich der Fehler auf:
cmd.Parameters.AddWithValue(@Geburtstag, txtGeburtstag.Text);
//  also benötigst Du eine passende Konvertierung:
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.


Orothred - Do 27.09.07 16:42

ok, danke für den tipp mit den parametern


Kha - Do 27.09.07 17:38
Titel: Re: Inhalte von Textboxen in Datenbank schreiben
user profile iconJü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)"
;