【问题标题】:Delete query in MS Access throws error data type mismatchMS Access 中的删除查询引发错误数据类型不匹配
【发布时间】:2018-04-03 17:51:29
【问题描述】:

我下面的查询有什么问题?

sqlquery = "DELETE FROM tblProductTransDetail WHERE (InvoiceNo) = @inv"

With sqlcommand
     .CommandText = sqlquery
     .Parameters.AddWithValue("@inv", Val(TextBoxNoNota.Text))
     .Connection = FormMain.conn
     .ExecuteNonQuery()
End With

也试过了:

"DELETE FROM tblProductTransDetail WHERE InvoiceNo = @inv"

还有一些其他的,但都没有用。

我的InvoiceNonumber 输入数据库(MS Access 2016)。

【问题讨论】:

  • 我认为 MS Access 不理解 @inv 部分。它似乎只使用{0}。给我一点....
  • 我在整个代码中都使用了@,尤其是在插入和选择查询中并且效果很好,为什么删除查询无法理解?
  • 如果InvoiceNo 是一个整数,那么您传递的是一个双精度数。 AddWithValue 是一个坏主意因为您需要数据库提供猜测数据类型。明显的默认表单实例同样是个坏主意
  • 我不知道什么是“直接号码”。 Val 但是总是返回一个不是整数的双精度数,因此数据类型不匹配。如果源是一个TextBox,用户输入一个值?那么你应该使用 TryParse。
  • 我的意思是直接号码就像.Parameters.AddWithValue("@inv", 10)

标签: sql vb.net ms-access


【解决方案1】:

您可以试一试吗?还假设您在顶部有一个对 System.Data.OleDb 的导入。

Convert.ToInt32 使文本成为整数(假设它是数字而不是文本)。强制 invParam 具有整数数据类型。

sqlquery = "DELETE FROM tblProductTransDetail WHERE (InvoiceNo) = ?"

With sqlcommand
     .CommandText = sqlquery
     Dim invParam as new OleDbParameter("InvoiceNo", OleDbType.Integer)
     invParam.Value = Convert.ToInt32(TextBoxNoNota.Text)
     .Parameters.Add(invParam)
     .Connection = FormMain.conn
     .ExecuteNonQuery()
End With

【讨论】:

    【解决方案2】:

    您使用的是 SQL 查询而不是 MS ACCESS 查询。

    你应该试试这个

    sqlquery = "DELETE  * FROM tblProductTransDetail WHERE (InvoiceNo) = @inv"
    

    SQL中的删除查询没有*,但Access中的删除查询有*

    【讨论】:

    • 我也认为错误是 = @inv。请像这样指定 Where InVoiceNo = '"& txtInv.Text & "'
    【解决方案3】:

    但是我可以通过使用不带参数的标准删除查询使其正常运行

    sqlquery = "DELETE FROM tblProductTransDetail WHERE InvoiceNo = " & cleansql(TextBoxNoNota.Text)
    

    注意:cleansql 是我清理文本和防止注入的功能。

    【讨论】:

    • 当你使用.Parameters.AddWithValue("@inv", CLng(TextBoxNoNota.Text)) 时会发生什么虽然我知道参数可能很棘手,但这段代码会受到 SQL 注入攻击。
    • 我意识到这一点。但在我的情况下,我的 TextBoxNoNota 被禁用以供用户输入。它由我的其他代码生成。如果您遵循之前的评论,您可以阅读我如何尝试使我的参数化查询工作。但不幸的是,这是目前唯一可行的方法。
    猜你喜欢
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多