【问题标题】:Syntax error in INSERT into statement when adding to access database添加到访问数据库时 INSERT into 语句中的语法错误
【发布时间】:2014-03-12 10:32:19
【问题描述】:

请有人帮我找出我的代码中的错误。 错误出现在我尝试并捕获我试图在我的数据库访问中添加记录的位置。错误是“Syntax error in INSERT into statement”。我已经尝试过使用

ds.Tables("Users").Rows.Add(dsNewRow)
            da.Update(ds, "Users")

关于我的选民登记,它运作良好。知道为什么它在这个表单上不起作用(用户注册)。

Imports System.Data.OleDb

Public Class UserRegister
Dim con As New OleDb.OleDbConnection
Dim dbProvider As String
Dim dbSource As String
Dim ds As New DataSet
Dim da As New OleDb.OleDbDataAdapter
Dim sql As String


Private Sub Label4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label4.Click

End Sub

Private Sub UserRegister_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    dbProvider = " PROVIDER=Microsoft.jet.OLEDB.4.0;"
    dbSource = "Data Source= C:\Users\Ronel\Documents\database\CSdatabase.mdb"

    con.ConnectionString = dbProvider & dbSource
    con.Open()
    sql = "SELECT*FROM tblUsers"
    da = New OleDb.OleDbDataAdapter(sql, con)
    da.Fill(ds, "Users")
    MsgBox("Database now Open")
    con.Close()
    'MsgBox("Database now Close")

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim cb As New OleDb.OleDbCommandBuilder(da)
    Dim dsNewRow As DataRow

    Dim empty =
    Me.Controls.OfType(Of TextBox)().Where(Function(txt) txt.Text.Length = 0)
    If empty.Any Then
        MessageBox.Show(String.Format("PLEASE FILL ALL FIELDS:"))
    Else
        dsNewRow = ds.Tables("Users").NewRow()
        dsNewRow.Item("Username") = TextBoxUser.Text
        dsNewRow.Item("Password") = TextBoxPass.Text
        dsNewRow.Item("LastName") = TextBoxFN.Text
        dsNewRow.Item("GivenName") = TextBoxGN.Text
        dsNewRow.Item("MiddleName") = TextBoxMN.Text

        ' Try
        ds.Tables("Users").Rows.Add(dsNewRow)
        da.Update(ds, "Users")
        '   Catch ex As Exception
        MsgBox("Error updating")
        '  End Try

        ' Me.Dispose()
        'Comelec.Show()
    End If

End Sub
End Class

【问题讨论】:

  • 试试sql = "SELECT * FROM tblUsers" ...
  • 试过这个。我仍然收到错误。
  • 是的。在我的访问数据库中,我的字段由管理员而非用户填写。
  • 我没有看到任何 INSERT 语句...它在哪里?
  • 我没有在我的代码中使用任何插入语句。 idk 为什么错误要求它。

标签: vb.net sql-insert


【解决方案1】:

我发现了一些问题。首先,您的 SQL 语句中需要一些空格。代替sql = "SELECT*FROM tblUsers",使用sql = "SELECT * FROM tblUsers"

其次,当使用OleDbCommandBuilder 时,代码使用您为DataAdapter 提供的SELECT 语句连接到数据库,并使用该语句为更新、删除和插入语句生成必要的SQL。需要打开与数据库的连接才能发生这种情况——您的连接在 CommandBuilder 运行时关闭。这可能是语法错误的来源。

CommandBuilder 将使用SELECT 中指定的所有 字段创建这些语句。如果您的用户表中的字段不是您尝试填充的五个字段,OleDbCommandBuilder 仍将构建一个 INSERT 语句,该语句也将尝试填充这些字段。根据您的表的结构,如果未填充必填字段,这可能会导致行被拒绝。要查看正在生成的 SQL 语句,您可以在使用 CommandBuilder 后查看 DataAdapter 对象的属性:

con.Open
sql = "SELECT * FROM tblUsers"
da = New OleDb.OleDbDataAdapter(sql, con)
Dim cb As New OleDb.OleDbCommandBuilder(da)
Debug.Print("SELECT: " & da.SelectCommand.CommandText)
Debug.Print("UPDATE: " & da.UpdateCommand.CommandText)
Debug.Print("DELETE: " & da.DeleteCommand.CommandText)
Debug.Print("INSERT: " & da.InsertCommand.CommandText)

有关 CommandBuilders 的一些额外阅读可在此处获得:http://msdn.microsoft.com/en-us/library/tf579hcz%28v=vs.110%29.aspx

试试这个:

Imports System.Data.OleDb

Public Class UserRegister
    Const dbProvider As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
    Dim dbSource As String = "Data Source=C:\Users\Ronel\Documents\database\CSdatabase.mdb"
    Dim con As New OleDb.OleDbConnection(dbProvider & dbSource)
    Dim ds As New DataSet
    Dim da As New OleDb.OleDbDataAdapter
    'Specify only the fields you need
    Dim sql As String = "SELECT UserName, Password, LastName, GivenName, MiddleName FROM tblUsers"


    Private Sub UserRegister_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        con.Open()
        da = New OleDb.OleDbDataAdapter(sql, con)
        da.Fill(ds, "Users")
        ' Get commands now, while connection is open. Do this once when the form is loaded, not every time button is clicked.
        Dim cb As New OleDb.OleDbCommandBuilder(da)
        con.Close()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' Validation code goes here
        If empty.Any Then
            MessageBox.Show(String.Format("PLEASE FILL ALL FIELDS:"))
        Else
            Dim dsNewRow As DataRow
            dsNewRow = ds.Tables("Users").NewRow()
            dsNewRow.Item("Username") = TextBoxUser.Text
            dsNewRow.Item("Password") = TextBoxPass.Text
            dsNewRow.Item("LastName") = TextBoxFN.Text
            dsNewRow.Item("GivenName") = TextBoxGN.Text
            dsNewRow.Item("MiddleName") = TextBoxMN.Text

            Try
                con.Open()
                ds.Tables("Users").Rows.Add(dsNewRow)
                da.Update(ds, "Users")
            Catch ex As Exception
                MsgBox("Error updating: " & Err.Description)
            Finally
                con.Close()
            End Try
        End If
    End Sub
End Class

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多