如何使用VB.NET在Access数据库中插入多条记录

Posted

技术标签:

【中文标题】如何使用VB.NET在Access数据库中插入多条记录【英文标题】:how to insert multiple records in Access database using VB.NET 【发布时间】:2017-08-12 17:20:14 【问题描述】:

我正在尝试学习如何在 VB.NET 中使用 Access,所以我尝试使用 Access 数据库制作一个简单的应用程序,该数据库可以用作字典,有人可以在数据库中添加一些单词,然后他可以搜索它们.

我的数据库包含两张表,一张是 Word |描述和另一个用Word |同义词

问题是一个词可能有多个同义词,所以我想我可以在文本框中输入所有同义词并使用 Regex.Split(" ") 将它们拆分并插入循环中。这可以用 OleDbParameters 完成吗? 这是我到目前为止所做的,但它只插入最后一条记录:

 str = "insert into Synonyms ([Word],[Synonym]) values (@word,@synonym)"
    cmd = New OleDbCommand(str, myConnection)
    cmd.Parameters.Add(New OleDbParameter("Word", CType(txtWord.Text, 
String)))
    cmd.Parameters.Add("@synonym", OleDbType.VarChar)
    Dim syn As String() = Regex.Split(txtSynonyms.Text, " ")

    Dim i As Integer = 0
    While i < syn.Length()
        cmd.Parameters("@synonym").Value = syn(i)
        i = i + 1
    End While
    Try
        cmd.ExecuteNonQuery()
        cmd.Dispose()
        MsgBox("Synonyms for word """ & txtWord.Text & """ added")
        txtWord.Clear()
        txtSynonyms.Clear()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

【问题讨论】:

您在循环中覆盖参数,然后只执行一次查询。如果要多次执行查询,请在循环中执行。 您只需将 cmd.ExecuteNonQuery 移动到遍历同义词数组的 while 循环中。在每个循环中插入数据。 也不确定使用 Regex.Split 对简单 string.Split 有什么好处 @Steve 我不知道移动 cmd.ExecuteNonQuery 是否意味着移动整个 Try Catch,我试过了,但我收到一条消息“ExecuteNonQuerry:连接属性尚未初始化” 一行,就一行。关于连接。您需要在执行任何操作之前打开它。从您的代码中不清楚您是否在 ExecuteNonQuery 之前打开连接 【参考方案1】:
myConnection.Open()
While i < syn.Length()
    cmd.Parameters("@synonym").Value = syn(i)
    cmd.ExecuteNonQuery()
    i = i + 1
End While
myConnection.Close()

【讨论】:

【参考方案2】:

也许你会觉得这很有帮助。

Imports System.Data.OleDb

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

        Dim con As New OleDb.OleDbConnection
        Dim dbprovider As String
        Dim dbsource As String
        Dim ds As New DataSet
        Dim da As OleDb.OleDbDataAdapter
        Dim sql As String
        Dim inc As Integer
        dbprovider = "Provider=Microsoft.ACE.OLEDB.12.0;"
        dbsource = "Data Source = C:\your_path_here\Nwind_Sample.accdb"
        con.ConnectionString = dbprovider & dbsource
        con.Open()
        sql = "SELECT * FROM [OrderDetails]"

        da = New OleDb.OleDbDataAdapter(sql, con)
        da.Fill(ds, "OrderDetails")

        Dim builder As New OleDbCommandBuilder(da)
        Dim dsnewrow As DataRow

        dsnewrow = ds.Tables("OrderDetails").NewRow()

        dsnewrow.Item(0) = OrderID.Text
        dsnewrow.Item(1) = ProductID.Text
        dsnewrow.Item(2) = UnitPrice.Text
        dsnewrow.Item(3) = Quantity.Text
        dsnewrow.Item(4) = Discount.Text
        'dsnewrow.Item(6) = True


        ds.Tables("OrderDetails").Rows.Add(dsnewrow)
        da.Update(ds, "OrderDetails")

    End Sub
End Class

【讨论】:

以上是关于如何使用VB.NET在Access数据库中插入多条记录的主要内容,如果未能解决你的问题,请参考以下文章

VB.Net/Access SQL 插入子查询问题

从 vb.net 将值插入 Access db

我想避免从 vb.net 到 Access 数据库的重复插入数据

如何在 VB.net 中使用 ROWNUM 从 MS-Access 数据库中检索数据

如何从 Access 数据库 VB.net 中检索特定数据?

如何确定VB.net中是不是已经存在记录?