【问题标题】:Trying to change Data in Database with DataTable in Visual Basic尝试在 Visual Basic 中使用 DataTable 更改数据库中的数据
【发布时间】:2013-03-11 07:55:25
【问题描述】:

我正在尝试在 Visual Basic 2010 上使用 DataTables 和 .mdb 数据库来执行以下功能,但它确实有效:

我有一个现有的 .mdb 数据库,其中包含一个表“日期”和该表中的命名列。 我想在数据库中添加一个包含新信息的新行。 所以我使用以下代码连接到数据库:

sql = "SELECT * FROM Daten"

            Dim connection As New OleDb.OleDbConnection

            Try
                connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & pfad_netzdb
            Catch e As Exception
                MessageBox.Show(e.Message)
            End Try
            Dim adapter As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(sql, connection)

之后,我用数据库的给定数据填充一个 DataTable:

Dim daten As New DataTable

            adapter.Fill(daten)

之后,我想在 DataTable 中添加一个 Row 并用新信息填充该 Row:

daten.Rows.Add()
daten.Rows(daten.Rows.Count - 1)(0) = "kdjfk"
daten.Rows(daten.Rows.Count - 1)(1) = "dkjfk"
daten.Rows(daten.Rows.Count - 1)(2) = "kdjfkd"

之后,我想将更改后的 DataTable 与新行和行中的新信息一起发送回数据库。我认为这是我的代码没有达到我期望的地方。我正在尝试这样,但它不起作用:

adapter.Update(daten)

谁能帮我解释一下为什么这个代码不起作用? 感谢您的帮助!

【问题讨论】:

  • 你有什么错误吗?
  • 请提供“代码不起作用”的内容。
  • 这行“daten.Rows.Count - 1”你在做什么

标签: database vb.net datatable


【解决方案1】:

您是否提供了InsertCommand?您可以使用CommandBuilder

Dim conString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & pfad_netzdb
Using connection As New OleDb.OleDbConnection(conString)
    Using adapter = New OleDb.OleDbDataAdapter("SELECT * FROM Daten", connection)
        Dim builder = New OleDb.OleDbCommandBuilder(adapter)
        builder.GetInsertCommand()
        Dim daten As New DataTable
        daten.Columns.Add("ColumnName1", GetType(String)) ' provide the correct name+type '
        daten.Columns.Add("ColumnName2", GetType(String)) ' provide the correct name+type '
        daten.Columns.Add("ColumnName3", GetType(String)) ' provide the correct name+type '
        Dim newRow = daten.Rows.Add()
        newRow(0) = "kdjfk"
        newRow(1) = "dkjfk"
        newRow(2) = "kdjfkd"
        connection.Open()
        adapter.Update(daten)
    End Using
End Using

【讨论】:

    【解决方案2】:

    也可以使用参数化的方式插入记录

    Dim adapter As OleDbDataAdapter = New OleDbDataAdapter()
    Dim command As OleDbCommand
    
    ' Create the SelectCommand.
    command = New OleDbCommand("SELECT * from Daten", connection)
    
    adapter.SelectCommand = command
    
    ' Create the InsertCommand.
    command = New OleDbCommand( _
        "INSERT INTO Daten(ColumnName1, ColumnName2,ColumnName3) " & _
        "VALUES (?, ?,?)", connection)
    
    command.Parameters.Add( _
        "ColumnName1", OleDbType.VarChar, 40, "kdjfk") //Replace with correct column name and data type
    command.Parameters.Add( _
        "ColumnName2", OleDbType.VarChar, 40, "dkjfk") //Replace with correct column name and data type
    command.Parameters.Add( _
        "ColumnName3", OleDbType.VarChar, 40, "kdjfkd")//Replace with correct column name and data type
    
    adapter.InsertCommand = command
    Return adapter
    

    【讨论】:

      猜你喜欢
      • 2019-10-05
      • 2016-12-29
      • 2015-04-12
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多