【问题标题】:SQL errors in insert statement VB插入语句VB中的SQL错误
【发布时间】:2015-01-01 20:30:03
【问题描述】:

我正在尝试插入我的 ORDERS 表中的特定列,使用文本框输入并使用另一个文本框输入查找特定列。

Private Sub addCardBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles addCardBtn.Click
        custConn.Open()

        'New sql Insert statement'
        Dim sqlStatement As String = "insert into ORDERS (CARD_NUMBER) ('" + cardNoTxt.Text + "') WHERE ORDER_ID" & orderIDTxt.Text
        commd = New OleDbCommand(sqlStatement, custConn)

        commd.ExecuteNonQuery()

        'If record is added successfully show message box'
        MessageBox.Show("Card Number Saved", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information)

        custConn.Close()

    End Sub

【问题讨论】:

  • 使用SQL参数,这种类型的错误将变得很少见(除了避免SQL注入攻击)。创建后查看sqlStatement,看看你错过了什么
  • 请在注释行末尾添加',以便本网站上突出显示的代码能够理解。
  • 首先要做的是让你的 sql 语句在 management studio 中工作,然后将其传输到代码中。
  • 谢谢@jasen 不知道我必须这样做

标签: sql vb.net visual-studio-2010 sql-insert


【解决方案1】:

也许,您想要一个UPDATE 查询?

Dim sqlStatement As String = "UPDATE ORDERS SET CARD_NUMBER = :CARDNO
                                   WHERE ORDER_ID = :ORDERID";

并且始终使用绑定变量。以避免 SQL*iInjection。

简单解释一下SQL*Injection是什么,

OR 1=1 添加到任何逻辑表达式将始终给出 TRUE 结果(WHERE name = 'Mahesh' or 1=1 将获取我表中的所有行..)。所以,当你像这样构造 SQL 语句时,你暴露了一个查询被篡改的漏洞。

commd = New OleDbCommand(sqlStatement, custConn)
commd.Parameters.Add("CARDNO", OracleType.VarChar).Value = cardNoTxt.Text
commd.Parameters.Add("ORDERID", OracleType.VarChar).Value = orderIDTxt.Text

commd.ExecuteNonQuery()

通过这种方式绑定变量,您的查询是安全的,并且在运行时不可修改。只是绑定变量的值发生了变化。它还改进了 DBMS 中的查询缓存。并且还提高了性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    相关资源
    最近更新 更多