VB. NET Datagridview заполняется из файла Excel. Мне нужно экспортировать все записи из этого datagridview в таблицу ms access (accdb) сразу - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть один DGV в визуальной основе c. net. Я заполняю его из файла Excel, и он отлично работает (успешно импортированы тысячи записей). Теперь мне нужно экспортировать все эти записи из dgv в базу данных MS Access (таблица) одним нажатием кнопки. У меня уже есть база данных MS Access 2016 (accdb) и таблица с именем tblstudents, в которую я хочу массово вставить эти данные.

 Dim AccsessAddress As String = "f:\dbc.accdb"

        Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & AccsessAddress & ";Persist Security Info=True;Jet OLEDB:Database Password=abcpass"
        Dim accConnection As New OleDb.OleDbConnection(connString)

Выше указаны расположение и строка подключения базы данных, которую я использую, и она отлично работает. .

Imports Spire.Xls
Imports Spire.DataExport
Imports Spire.License
Imports System
Imports System.Data
Imports System.Data.OleDb

Public Class Form3
    Dim con As New OleDbConnection
    Dim ds As New DataSet
    Dim dt As New DataTable
    Dim da As New OleDbDataAdapter

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim workbook As Workbook = New Workbook
        workbook.LoadFromFile("F:\hi.xlsx")
        Dim sheet As Worksheet = workbook.Worksheets(0)
        Me.DataGridView1.DataSource = sheet.ExportDataTable

        DataGridView1.Rows.RemoveAt(0)

        'MsgBox("We will delete empty rows...")

        For r As Integer = DataGridView1.Rows.Count - 1 To 0 Step -1
            Dim empty As Boolean = True
            For Each cell As DataGridViewCell In DataGridView1.Rows(r).Cells
                If Not IsNothing(cell.Value) Then
                    empty = False
                    Exit For
                End If
            Next
            If empty Then DataGridView1.Rows.RemoveAt(r)
        Next


    End Sub
Try
            Dim AccsessAddress As String = "f:\dbc.accdb"

            Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & AccsessAddress & ";Persist Security Info=True;Jet OLEDB:Database Password=abcpass"
            Dim accConnection As New OleDb.OleDbConnection(connString)
            Dim sql As String = "SELECT * FROM tblstudents"
            Dim accDataAdapter As New OleDb.OleDbDataAdapter(sql, accConnection)
            Dim accCommandBuilder As New OleDb.OleDbCommandBuilder()
            accDataAdapter.InsertCommand = accCommandBuilder.GetInsertCommand()
            accDataAdapter.UpdateCommand = accCommandBuilder.GetUpdateCommand()
            Dim accDataTable As DataTable = dt.Copy()
            ''Just to make sure, set the RowState to added to make sure an Insert is performed'
            For Each row As DataRow In accDataTable.Rows '
                If row.RowState = DataRowState.Added Or DataRowState.Unchanged Then '
                    row.SetAdded() '
                End If '
            Next '
            accDataAdapter.Update(accDataTable)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

При использовании приведенного выше кода из Inte rnet я получаю эту ошибку "Необходимо инициализировать свойство DataAdapter.SelectComand"

Как устранить эту ошибку .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...