【问题标题】:Invalid SQL statement; expected 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'无效的 SQL 语句;预期为“DELETE”、“INSERT”、“PROCEDURE”、“SELECT”或“UPDATE”
【发布时间】:2014-05-06 04:29:54
【问题描述】:

您好,我有一个无效的 sql 语句错误。这是我的代码:

Imports System.Data.OleDb   'For OleDbConnection 
Imports System.Data         'For ConnectionState 


Public Class WebForm1

    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    End Sub

    Protected Sub btnInsert_Click(sender As Object, e As EventArgs) Handles btnInsert.Click
        '1 declare the variables
        Dim strName As String = txtName.Text
        Dim strAddress As String = txtAddress.Text


        '2. creates a new connection to your DB.
        Dim conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\Users\GT\Documents\Database11.accdb'")
        If conn.State = ConnectionState.Open Then
            conn.Close()
        End If

        '3. open the connection to your DB. 
        conn.Open()

        '4. assign your SQL statement into sqlString variable. 
        Dim sqlString As String
        sqlString = "INSERT INTO tblStuInfo (stuName, stuAddress) VALUES ('" & strName & "' , '" & strAddress & "')"

        '5. create a new command that links your SQL statement with your connection. 
        Dim sqlcommand As New OleDbCommand(sqlString, conn)

        '6. execute your command.
        sqlcommand.ExecuteNonQuery()
    End Sub
End Class

有什么问题?数据库的路径和数据库的表名是正确的。请帮忙!

【问题讨论】:

  • 那里有一个 sql 注入错误。使用参数化的 SqlCommand。
  • 我该怎么做?顺便说一句,这是我从一本书中学习的教程
  • 我怎样才能让我的代码工作?怎么了?
  • 我不想使用参数化的SqlCommand,本教程来自一本书。我的代码有什么问题?我正确地遵循了它,但得到了那个错误

标签: sql vb.net


【解决方案1】:

尝试替换

sqlString = "INSERT INTO tblStuInfo (stuName, stuAddress) VALUES ('"
    & strName & "' , '" & strAddress & "')"

sqlString = "INSERT INTO tblStuInfo (stuName, stuAddress) VALUES ('"
    & strName.Replace("'", "''") & "' , '" & strAddress.Replace("'", "''") & "')"

这应该可以解决当您的字符串包含 ' 字符时发生的任何 SQL 注入问题。

无论如何,我认为您应该在基础表中添加(或使用)一个键,否则您将如何取回这些值?

【讨论】:

  • 是的,但是为什么在教程中没有提到使用“替换”?
  • 也许是因为只有在strAddress 包含单引号时才会出现问题?在strAddress 没有引号的情况下查询似乎没问题?
  • @user3414064 (疯狂猜测)可能是因为本教程是关于 vb.net,而不是关于 SQL(所以理所当然地认为你已经知道 SQL 的技巧和怪癖) - 或者可能是因为这是一个教程,有时会稍微介绍一些蚂蚁的东西,并且在 sql 中管理字符串分隔符被教程认为是一个“高级主题”
  • 否 我确定本教程是正确的,并且我确定我正确地遵循了它。这是:sendspace.com/file/r2g7fq
  • @user3414064 最好的办法是使用“查询参数”,但是比较复杂,看这里stackoverflow.com/a/542542/1057961
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 2015-07-23
  • 2013-08-27
相关资源
最近更新 更多