我有一个控件ID为HourlyCharter的dropdownList。
然后在codebehind上,我试图从数据库中查询每小时等于HourlyCharter值的记录。
如果我使用此代码:
StrSQL = "select h.fare, h.tip, h.total from hourlyQRY h "
StrSQL += " Where h.Hourly = " & HourlyCharter.SelectedValue
' Initialize Database Connection
Dim connStr As String = ConfigurationManager.ConnectionStrings("ALSConnectionString").ConnectionString
Dim conn As New OleDbConnection(connStr)
Dim cmd As New OleDbCommand(StrSQL, conn)
有效。
如果我使用参数化查询,例如:
StrSQL = "select h.fare, h.tip, h.total from hourlyQRY h "
StrSQL += " Where h.Hourly = @hourly"
' Initialize Database Connection
Dim connStr As String = ConfigurationManager.ConnectionStrings("ALSConnectionString").ConnectionString
Dim conn As New OleDbConnection(connStr)
Dim cmd As New OleDbCommand(StrSQL, conn)
'We use parametized query to prevent sql injection attack
Dim p1 As New OleDbParameter("@hourly", HourlyCharter.SelectedValue)
cmd.Parameters.Add(P1)
我收到以下错误:
条件表达式中的数据类型不匹配
每小时是数字数据类型,我们正在使用Access 2010数据库。
有任何想法如何解决这个问题?
'open recordset to receive db values
rs = cmd.ExecuteReader()
' This acts like the (Not RecordSource.Eof) in ASP 3.0 to loop and retrieve records.
While rs.Read()
' If rs("city") <> "" Then
Dim tipValue As Decimal = rs("tip")
Dim totValue = rs("total")
' Else
' End If
Dim tp As String = [String].Format("{0:C}", tipValue)
Dim tot As String = [String].Format("{0:C}", totValue)
lblTip.Text = tp
lblTotal.Text = tot
End While
答案 0 :(得分:1)
您需要确保放在参数中的对象也是数字类型。 SelectedValue
是一个字符串。
Dim p1 As New OleDbParameter("@hourly", Decimal.Parse(HourlyCharter.SelectedValue))
发生数据类型不匹配的地方 - 它期待一个数字,但它会得到一个字符串。
答案 1 :(得分:0)
尝试指定参数的数据类型。您可以在创建后执行此操作:
p1.OleDbType = OleDb.OleDbType.Numeric
您也可以在构造函数上执行此操作,但它需要更多参数,我不确定您是否拥有所有这些参数,也不知道它们是做什么的。
答案 2 :(得分:0)
而不是
Dim p1 As New OleDbParameter("@hourly", HourlyCharter.SelectedValue)
cmd.Parameters.Add(p1)
你可以尝试
cmd.Parameters.AddWithValue("@hourly", HourlyCharter.SelectedValue)