【问题标题】:Error When trying to add Customer to Database (syntax error in insert into statement oledb vb net)尝试将客户添加到数据库时出错(插入语句 oledb vb net 时出现语法错误)
【发布时间】:2014-05-28 14:18:07
【问题描述】:

我正在做一项大学作业,并且已经尝试了好几个小时,但我似乎无法让我的新客户将其保存到数据库中!如果您可以查看我的代码,提出任何建议或让我知道更有效的方法,我真的会非常感谢它。下面我为此提供了我的代码示例。

首先,在加载表单时,我确定要放入数据库的新客户 ID:

Private Sub frmRegister_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'Me.CustomerTableAdapter.Fill(Me.DatabasePizzaPalaceDataSet.Customer)

    Dim conn As New System.Data.OleDb.OleDbConnection()
    conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=H:\Year 2\Unit 17 Project Planning\Workto do\PizzaPalce\Program\DatabasePizzaPalace.accdb"

    conn.Open()

    Dim Rows As Integer
    Dim sql As String = "SELECT * FROM Customer"
    Dim da As OleDb.OleDbDataAdapter
    Dim ds As New DataSet
    da = New OleDb.OleDbDataAdapter(sql, conn)

    da.Fill(ds, "Customer")

    Rows = ds.Tables("Customer").Rows.Count

    NewCustomerID.Text = Rows + 1

    Customer_IDTextBox.Text = NewCustomerID.Text

    conn.Close()

End Sub

话虽如此,这是我在单击保存按钮时运行的一段代码,用于通过新数据行添加记录。

Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click

    Dim conn As New System.Data.OleDb.OleDbConnection()
    conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=H:\Year 2\Unit 17 Project Planning\Workto do\PizzaPalce\Program\DatabasePizzaPalace.accdb"
    conn.Open()

    Dim inc As Integer
    Dim sql As String = "SELECT * FROM Customer"
    Dim da As OleDb.OleDbDataAdapter
    Dim ds As New DataSet
    da = New OleDb.OleDbDataAdapter(sql, conn)
    da.Fill(ds, "Customer")
    inc = Customer_IDTextBox.Text

    If inc <> -1 Then

        Dim cb As New OleDb.OleDbCommandBuilder(da)

        Dim dsNewRow As DataRow

        dsNewRow = ds.Tables("Customer").NewRow()

        dsNewRow.Item("Customer_ID") = Customer_IDTextBox.Text
        dsNewRow.Item("Username_Email") = Username_EmailTextBox.Text
        dsNewRow.Item("Password") = PasswordTextBox.Text
        dsNewRow.Item("First_Name") = First_NameTextBox.Text
        dsNewRow.Item("Surname") = SurnameTextBox.Text
        dsNewRow.Item("Mobile") = MobileTextBox.Text
        dsNewRow.Item("House") = HouseTextBox.Text

        ds.Tables("Customer").Rows.Add(dsNewRow)

        da.Update(ds, "Customer")

        MsgBox("New Record added to the Database")

        conn.Close()

        frmLogin.Show()

    End If

    'Dim cb As New OleDb.OleDbCommandBuilder(da)


    'Me.CustomerTableAdapter.Insert(Customer_IDTextBox.Text, Username_EmailTextBox.Text, PasswordTextBox.Text, First_NameTextBox.Text, SurnameTextBox.Text, MobileTextBox.Text, HouseTextBox.Text)
    'Me.CustomerTableAdapter.Fill(Me.DatabasePizzaPalaceDataSet.Customer)
    'Me.Validate()
    'Me.CustomerBindingSource.EndEdit()
        'Me.CustomerTableAdapter.Fill(DatabasePizzaPalaceDataSet.Customer)
        'Me.TableAdapterManager.UpdateAll(Me.DatabasePizzaPalaceDataSet)

    'da.Update(ds, "Customer")

    'MsgBox("You have been succesfully registerd with us. Thanks!")

    'conn.Close()

    'frmLogin.Show()
End Sub

在cmets你还可以看到我老师提供的代码,我们应该改进,我只是想找到一种方法来使它工作!

非常感谢,非常感谢所有帮助和建议。

【问题讨论】:

  • 我不确定,我正在尝试按照本教程提交对数据库的更改 - homeandlearn.co.uk/NET/nets12p10.html
  • 但是,命令生成器和更新应该进行保存
  • 我误读了文档。我再看看。
  • 谢谢兄弟,非常感谢您的帮助
  • 您确定"Customer" 是数据集中表的名称吗?我试过你的代码,它对我有用。在调试时,代码是否真的进入了IF Then Else 语句?

标签: sql database vb.net syntax-error


【解决方案1】:

我使用了ds.Tables(0) 而不是ds.Tables("Customer")(或者您的表在DataSet 中的任何索引。)

    Dim con As New OleDbConnection(_myConn) ''_myConn should be your connection string
    con.Open()
    Dim da As OleDbDataAdapter
    Dim ds As New DataSet
    da = New OleDbDataAdapter("select * from customer", con)
    da.Fill(ds)

    Dim cb As New OleDbCommandBuilder(da)
    Dim dsNewRow As DataRow

    dsNewRow = ds.Tables(0).NewRow()
    dsNewRow.Item(1) = "1"
    dsNewRow.Item(2) = "Blah"
    dsNewRow.Item(3) = "Test"
    dsNewRow.Item(4) = "T"
    dsNewRow.Item(5) = "T"
    dsNewRow.Item(6) = "T"
    dsNewRow.Item(7) = "20000101"

    ds.Tables(0).Rows.Add(dsNewRow)
    da.Update(ds.Tables(0))

    con.Close()

实现您的数据库架构也很重要。如果您的第一列是标识自动递增列,您希望避免尝试向该列插入任何内容。我更喜欢使用索引,因为将列名拼错为字符串要容易得多,尽管它可能不太清楚。

所以,Customer_ID 可能是(也可能不是)自增字段,这意味着尝试将数据插入该列会导致错误。

【讨论】:

  • 我的数据库不使用自动递增的键,但习惯了,我将再次创建程序复制粘贴代码并创建新连接,我会告诉你如何。谢谢大家
  • 没问题。只要确保数据类型正确。这段代码对我有用,所以只要您的连接正确并且您将正确的数据类型/字段数插入到数据库中,它应该可以工作。
  • 我遇到了同样的错误,我指的是根据索引而不是名称和项目相同的表,但是尝试更新时出错...我之前看过我的数据库这样做,它被设置为数字,尽管它确实有一个主键和数据库上已经存在的关系。然后我刚刚创建了一个新的解决方案,复制并粘贴旧代码创建了新的连接,只是将代码编辑到这里什么都没有,但是,非常感谢您的帮助,它帮助我更多地了解可能发生的事情以及它是如何工作的,如果您有任何其他想法,请告诉我。
  • 当你说“它被设置为数字”时,你是什么意思?
  • 让我扩展数据类型。因此,如果Customer_ID 是数据库中的Number 字段,您需要像这样包装您的文本框值:CInt(Customer_IDTextBox.Text)。这会将文本框中的字符串值转换为数据库持有/期望的数据类型。
猜你喜欢
  • 1970-01-01
  • 2012-03-21
  • 2013-11-15
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多