首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Data.OleDb.OleDbException

System.Data.OleDb.OleDbException
EN

Stack Overflow用户
提问于 2015-01-09 22:08:02
回答 1查看 537关注 0票数 0

我正在尝试连接到.accdb access 2010数据库。

我得到了这样的结果: System.Data.dll附加信息中发生了类型为'System.Data.OleDb.OleDbException‘的未处理异常:条件表达式中的数据类型不匹配。

但我不知道问题出在哪里,出了什么问题。我该怎么办?这是我的代码:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2015-01-10 00:45:01

在SQL中,我会检查"fld_bil“和"fld_price”是否都是数字(就像不是将两个包含数字的字符串相乘一样)。我还会确保"fld_order_no“和您的局部变量"ordered”是数字的。OLEDB的类型异常让我认为这是SQL中的转换错误。

此外,您可能希望将查询参数化,以防止SQL注入漏洞。这很容易做到。在命令对象(可能在get_data方法中)中,您可能希望执行以下操作:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27862366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档