Jag har stött på problem när jag skall använda ett double-fält i en SQL-sträng. När jag kollar i "Locals" i VS så används punkt som decimalavskiljare men jag får felmeddelandet: Använd alltid parametrar: Om du har deklarerat dblMin och dblMax som Double, så kommer satsen Jag har sagt det förut. Använd inte implicit konvertering till sträng, det blir fel förr eller senare. ... appropå "implicit konvertering", Martin. Eh? ..... ahhhh my bad... :-(Kommatecken och SQL
Syntaxfel (komma) i frågeuttrycket '(Ny> 57,711954885624 AND Ny< 58,3827983453696)'
strProvider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
strFileSource = Application.StartupPath & "\UFS.mdb"
oOleDbConn = New OleDbConnection
oOleDbConn.ConnectionString = strProvider & strFileSource
oOleDbConn.Open()
strSQL = "SELECT Notis_ID FROM Händelser WHERE Ny > " & dblMin & " AND Ny < " & dblMax & ""
oOleDbCmd = New OleDb.OleDbCommand(strSQL, oOleDbConn)
oOleDbDa = New OleDb.OleDbDataAdapter
oOleDbDa.SelectCommand = oOleDbCmd
odtDataTable = New DataTable
oOleDbDa.Fill(odtDataTable)
intAntalRader = odtDataTable.Rows.Count
osv...
Hoppas att någon kan hjälpa mig med dettaSv: Kommatecken och SQL
strProvider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
strFileSource = Application.StartupPath & "\UFS.mdb"
oOleDbConn = New OleDbConnection
oOleDbConn.ConnectionString = strProvider & strFileSource
oOleDbConn.Open()
strSQL = "SELECT Notis_ID FROM Händelser WHERE Ny > ? AND Ny < ?"
oOleDbCmd = New OleDb.OleDbCommand(strSQL, oOleDbConn)
oOleDbCmd.Parameters.Add(new OleDbParameter("dblMin", dblMin));
oOleDbCmd.Parameters.Add(new OleDbParameter("dblMax", dblMax));
oOleDbDa = New OleDb.OleDbDataAdapter(oOleDbCmd)
odtDataTable = New DataTable
oOleDbDa.Fill(odtDataTable)
intAntalRader = odtDataTable.Rows.Count
osv...
Sv: Kommatecken och SQL
strSQL = "SELECT Notis_ID FROM Händelser WHERE Ny > " & dblMin & " AND Ny < " & dblMax & ""
att ta deras värden och automatiskt konvertera till String och använda kommatecken (om det är det som gäller i de globala inställningarna).
I C# hade jag gjort så här:
CultureInfo MyCulture = new CultureInfo("en-US"); //to enable decimal POINT
strSQL = "SELECT Notis_ID FROM Händelser WHERE Ny > " & dblMin.ToString(MyCulture) & " AND Ny < " & dblMax.ToString(MyCulture) & ""
Då blir det en decimalpunkt i selectsträngen.Sv: Kommatecken och SQL
Följande fungerar alltid oavsett nationella inställningar på server och klient
- Integer/Decimal
return value.ToString(CultureInfo.InvariantCulture)
- Double
return value.ToString("r", CultureInfo.InvariantCulture)
- Boolean
' MSAccess
If value Then
Return "True"
Else
Return "False"
End If
' SQLServer
If value Then
Return "1"
Else
Return "0"
End If
- DateTime
' MSAccess
If value.Year < 1970 Then
Return "#1/1/1970#" ' or throw
Else
Return value.ToString("\#M\/d\/yyyy\#",CultureInfo.InvariantCulture)
End If
' SQLServer
If value.Year < 1970 Then
Return "{ d '1970-01-01' }" ' or throw
Else
Return value.ToString("\{ \d \'yyyy\-MM\-dd\'\}", CultureInfo.InvariantCulture);
End IfSv:Kommatecken och SQL
Varför skriver du "Return "1" i ditt SQLServer exempel, när Return returnerar integer ? Sv: Kommatecken och SQL
Han returnerar ju de strängarna som de olika databaserna förväntas. I det fallet en 1:a för "true".Sv:Kommatecken och SQL
Visst du har rätt jag blandar ihop SQLServer överskriften med det som står under, som kod i SQLServer.
(vilket det inte är, när jag läser noggrannare)
[arbets/miljöskadad]