【问题标题】:VB.NET Insert Data into MS Access DBVB.NET 将数据插入 MS Access DB
【发布时间】:2019-08-05 17:21:51
【问题描述】:

这是我第一次尝试使用 .NET 和数据库。

我正在尝试向表中添加记录,但没有添加任何内容。我已将其简化为下面的基本代码。

没有生成错误,但没有任何内容添加到表中。

Imports System.Data
'Imports System.Data.OleDb
Class Form1
    Dim dbProvider As String
    Dim dbSource As String

    Dim dbPathAndFilename As String
    Dim con As New OleDb.OleDbConnection
    Dim ds As New DataSet
    Dim da As OleDb.OleDbDataAdapter
    Dim sql As String

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;" ' MDB
        'dbProvider = "PROVIDER=Microsoft.Ace.OLEDB.12.0;" 'ACCDB
        dbSource = "Data Source="

        LoadData()
    End Sub

    Sub LoadData()
        'Connect to db
        'You could store the db path in the Settings of the App.
        'dbPathAndFilename = My.Settings.dbPath
        dbPathAndFilename = "C:\temp\VB\DBTest\Test.mdb"
        con.ConnectionString = dbProvider & dbSource & dbPathAndFilename

        con.Open()
        sql = "INSERT INTO Table1(Field1) VALUES('Field1');"
        da = New OleDb.OleDbDataAdapter(sql, con)
        con.Close()
    End Sub
End Class

【问题讨论】:

标签: .net vb.net ms-access oledb


【解决方案1】:

试试这个

Class Form1
    Private dbProvider As String
    Private dbPathAndFilename As String

    Sub LoadData()
        dbProvider = "Microsoft.Jet.OLEDB.4.0;"
        dbPathAndFilename = "C:\temp\VB\DBTest\Test.mdb"
        Using con As New OleDb.OleDbConnection($"PROVIDER={dbProvider};DATA SOURCE={dbPathAndFilename}")
            con.Open()
            Using cmd = con.CreateCommand()
                cmd.CommandText = "INSERT INTO Table1([Field1]) VALUES(@field1);"
                cmd.Parameters.AddWithValue("@field1", field1Value) ' replace field1Value with your value
                cmd.ExecuteNonQuery()
            End Using
        End Using
    End Sub

End Class

与您的版本相比,它有一些优势。

  1. 它使用Using 块限制一次性对象的范围
  2. 它使用一个避免注入的首选参数
  3. 我觉得连接字符串有点笨拙,这让它变得整洁了一点
  4. 最重要的是,引入了命令,因此可以调用 ExecuteNonQuery,这与在查询中返回数据的链接示例不同。

【讨论】:

    【解决方案2】:
    Imports System.Data
    Imports System.Data.OleDb
    
    Class Form1
        Dim dbProvider As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0;" ' MDB
        Dim dbSource As String = "Data Source="
        Dim dbPathAndFilename As String
    
        Public Property ConnectionString as String
           Get
              return $"{dbProvider}{dbSource}{dbPathAndFilename}"
           End Get
        End Property
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            dbPathAndFilename = "C:\temp\VB\DBTest\Test.mdb"    
            LoadData()
        End Sub
    
        Sub LoadData()
            Dim sql As String = "INSERT INTO Table1(Field1) VALUES(?);"
    
            Using con As New OleDbConnection(ConnectionString), _
                  cmd As New OleDbCommand(sql)
    
                cmd.Parameters.Add("Field1", OleDbType.VarWString, 50).Value = "Field1"
    
                con.Open()
                cmd.ExecuteNonQuery()
            End Using
        End Sub
    End Class
    

    【讨论】:

      猜你喜欢
      • 2013-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 2017-12-22
      • 1970-01-01
      相关资源
      最近更新 更多