none
Reader Fehler mit Dezimaltrennzeichen RRS feed

  • 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:

     

     

    Dim mycmd As New SqlCommand
    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

     

    Mittwoch, 20. Juli 2011 14:29

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
    Mittwoch, 20. Juli 2011 14:51
    Moderator

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
    Mittwoch, 20. Juli 2011 14:51
    Moderator
  • Salü Stefan

    Supervielen Dank für die megaschnelle Antwort. Eigentlich einleuchtend, bei DataSet's macht man das ja auch ähnlich. Funktioniert einwandfrei.

    Sei herzlichst gegrüsst
    Sabrina

    Mittwoch, 20. Juli 2011 15:16