Autor Beitrag
Orothred
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 86


C# (VS 2005)
BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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
BeitragVerfasst: Do 27.09.07 16:16 
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:

ausblenden 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:
ausblenden 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.


Zuletzt bearbeitet von JüTho am Fr 28.09.07 08:53, insgesamt 1-mal bearbeitet
Orothred Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 86


C# (VS 2005)
BeitragVerfasst: Do 27.09.07 16:42 
ok, danke für den tipp mit den parametern
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 27.09.07 17:38 
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.
ausblenden 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)"
;