将在运行时创建的数据表保存到空mdb

时间:2012-08-27 09:20:09

标签: vb.net ms-access datatable

您好我有一个Datatable,有36列和大约112000条记录以及一个空的mdb文件,将该表添加到空mdb数据库的最佳方法是什么?

我是否必须使用SQL命令CREATE TABLE并手动将每列添加到创建的数据表中,然后使用SQL insert命令?

是否有类似SqlBulkCopy的内容可以用于此任务? 请注意,Datatable是在运行时创建的,从未存在于数据库中,大部分数据都来自XML文件

1 个答案:

答案 0 :(得分:2)

我认为最好的方法是使用OleDBAdapter类。在继续此过程之前,您需要首先构建数据库。正如OleDBAdapter所需要的那样。如果您还记得,使用DataAdapter的Fill()方法读取数据库中表的内容并填充本地缓存的DataTable对象。

在ADO.Net中保存数据有3个步骤:

  • 使用Fill()方法
  • 获取本地缓存的数据副本
  • 编写对本地缓存副本进行更改的代码(或使用控件)
  • 使用Update()方法
  • 将更改保存回基础数据库

这是代码,

Using conn As New OleDBConnection("connectionString Here")
    Using comm As New OleDBCommand()
        With comm
            .Connection = conn
            .CommandType = CommandType.CommandText
            .CommandText = "SELECT * FROM youTableName"
        End With
        Using adapter As New OleDBDataAdapter(comm)
            Dim _dataTable As New DataTable()
            adapter.Fill(_dataTable)

            'add you records here  '
            ' preferably by using loop '
            Dim _dataRow As DataRow
            _dataRow = _dataTable.NewRow()
            _dataRow("colNameA") = "valueA"
            _dataRow("colNameB") = "valueB"
            '........ '
            _dataTable.Rows.Add(_dataRow)

            Dim dt_changes As DataTable
            dt_changes = _dataTable.Changes()
            If Not IsNothing(dt_changes) Then
                Using commBuild As OleDbCommandBuilder(adapter)
                    Dim rowCount as Integer = adapter.Update(dt_changes)
                    MsgBox(rowCount  & " updated")
                End Using
            End If
        End Using
    End Using
End Using