Benutzer mit den meisten Antworten
Reader Fehler mit Dezimaltrennzeichen

Frage
-
Salü alle zusammen
Ich habe einen Reader der mir in VisualStudio 2008 einwandfrei funktioniert hatte. Jetzt habe ich den Code in VisualStudio 2010 und bekomme die Fehlermeldung "Falsche Syntax in der Nähe von ',' auf der Zeile von ExecuteReader.
Mein Code ist:
mycmd.Connection = myconn
mycmd.CommandText ="SELECT * FROM vw_versandkosten WHERE max_gewicht >= " & mygewicht &
" ORDER BY sort ASC, preis ASC"
Dim myreader As SqlDataReader
myreader = mycmd.ExecuteReader
mygewicht ist eine Variable vom Typ Double und beinhaltet im Moment des Fehlers den Wert 0.56133 (Punkt)
Der CommandText zeigt mir jedoch
"SELECT * FROM vw_versandkosten WHERE max_gewicht >= 0,56133 ORDER BY sort ASC, preis ASC"
mit Koma an.Setze ich mygewicht auf 0, so läuft der Code durch.
Was mache ich falsch?
Viele Grüsse
Sabrina
Antworten
-
Hallo Sabrina,
hier sind gleich 2 Sachen falsch. SQL Statements inkl. der Werte von Hand zusammenbasteln ist böse[TM]. Hierfür baut man Parameter ein und verwendet dann SqlParameter Objekte für die Wertzuweisung.
Dim mycmd As New SqlCommand mycmd.Connection = myconn mycmd.CommandText = "SELECT * FROM vw_versandkosten WHERE max_gewicht >= @Gewicht ORDER BY sort ASC, preis ASC" mycmd.Parameters.AddWithValue( "@Gewicht", mygewicht ) Dim myreader As SqlDataReader myreader = mycmd.ExecuteReader
Ansonsten hast Du über kurz oder lang ggfs. ein arges SQL Injection Problem.
Zum anderen ist innerhalb von SQL Statements das , als Trenner, bspw. für Spaltenangaben SELECT Spalte1, Spalte2, ... ISNULL( feld, defaultwert ), ... gedacht. Du kannst also bei den Zahlen nur den Punkt verwenden. Das Format, welches dir aufgrund der Ländereinstellung zurückgegeben wird, ist aber nicht unbedingt mit dem kompatibel, was im SQL Statement benötigt wird. Aber auch dieses Problem umgehst Du mit SqlParametern.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Sabrina Sanders Mittwoch, 20. Juli 2011 15:15
Alle Antworten
-
Hallo Sabrina,
hier sind gleich 2 Sachen falsch. SQL Statements inkl. der Werte von Hand zusammenbasteln ist böse[TM]. Hierfür baut man Parameter ein und verwendet dann SqlParameter Objekte für die Wertzuweisung.
Dim mycmd As New SqlCommand mycmd.Connection = myconn mycmd.CommandText = "SELECT * FROM vw_versandkosten WHERE max_gewicht >= @Gewicht ORDER BY sort ASC, preis ASC" mycmd.Parameters.AddWithValue( "@Gewicht", mygewicht ) Dim myreader As SqlDataReader myreader = mycmd.ExecuteReader
Ansonsten hast Du über kurz oder lang ggfs. ein arges SQL Injection Problem.
Zum anderen ist innerhalb von SQL Statements das , als Trenner, bspw. für Spaltenangaben SELECT Spalte1, Spalte2, ... ISNULL( feld, defaultwert ), ... gedacht. Du kannst also bei den Zahlen nur den Punkt verwenden. Das Format, welches dir aufgrund der Ländereinstellung zurückgegeben wird, ist aber nicht unbedingt mit dem kompatibel, was im SQL Statement benötigt wird. Aber auch dieses Problem umgehst Du mit SqlParametern.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Sabrina Sanders Mittwoch, 20. Juli 2011 15:15