我正在尝试连接到.accdb access 2010数据库。
我得到了这样的结果: System.Data.dll附加信息中发生了类型为'System.Data.OleDb.OleDbException‘的未处理异常:条件表达式中的数据类型不匹配。
但我不知道问题出在哪里,出了什么问题。我该怎么办?这是我的代码:
Private Sub frm_ViewsOrder_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
cmb_order.DataSource = get_data("SELECT DISTINCT fld_order_no FROM tbl_order")
cmb_order.DisplayMember = "fld_order_no"
End Sub
Private Sub refresh_grid(orderid As String)
grd_view.DataSource = get_data("SELECT fld_product_name, fld_bil, fld_price, fld_bil * fld_price as Total FROM tbl_products, tbl_order WHERE tbl_order.fld_product_id = tbl_products.fld_product_id AND tbl_order.fld_order_no = """ & orderid & """ ")
grd_view.Columns(0).HeaderText = "Product Name"
grd_view.Columns(1).HeaderText = "Quantity"
grd_view.Columns(2).HeaderText = "Unit Price (RM)"
grd_view.Columns(3).HeaderText = "Amount(RM)"
grd_view.Columns(2).DefaultCellStyle.Format = "N2"
grd_view.Columns(3).DefaultCellStyle.Format = "N2"
Dim totalValue As Decimal
For Each dgvRow As DataGridViewRow In grd_view.Rows
If Not dgvRow.IsNewRow Then
totalValue += CDec(dgvRow.Cells(3).Value)
End If
Next
txt_total.Text = String.Format("{0:n2}", totalValue)
End Sub发布于 2015-01-10 00:45:01
在SQL中,我会检查"fld_bil“和"fld_price”是否都是数字(就像不是将两个包含数字的字符串相乘一样)。我还会确保"fld_order_no“和您的局部变量"ordered”是数字的。OLEDB的类型异常让我认为这是SQL中的转换错误。
此外,您可能希望将查询参数化,以防止SQL注入漏洞。这很容易做到。在命令对象(可能在get_data方法中)中,您可能希望执行以下操作:
cmd.CommandText = "SELECT fld_product_name, fld_bil, fld_price, fld_bil * fld_price as Total FROM tbl_products, tbl_order WHERE tbl_order.fld_product_id = tbl_products.fld_product_id AND tbl_order.fld_order_no = @orderid"
' ordered being your local variable
cmd.Parameters.AddWithValue("@orderid", orderid)这将有助于防止任何人在查询结束时使用SQL。下面是一个用VB.Net编写的更深入的参数化查询示例的链接:
http://www.blakepell.com/2012-02-28-vbnet-parameterized-query-example-and-why-you-should-care
https://stackoverflow.com/questions/27862366
复制相似问题