peterjames09 Ответов: 1

Vb.net SQL bulk insert/copy


Надеюсь, кто-нибудь сможет помочь,

Предыстория: есть старая машина, которая помещает данные в файл MS access, и нам нужно импортировать таблицу в таблицу SQL, база данных access хранит скользящие 3 дня данных, а затем удаляет старые данные, идея состоит в том, чтобы запускать задачу каждое утро, чтобы вставить новые записи в sql, игнорировать существующие, чтобы мы могли построить график в течение года.

Я извлек данные из MS access в Datatable под названием "таблица" и создал имена столбцов в таблице SQL, которая соответствует, я читал о SQL Bulkcopy, но все образцы, которые я видел, находятся в C#, но любые преобразователи кода ошибаются, и я не уверен на 100%, что они будут делать то, что им нужно.

Может ли кто-нибудь помочь?
Пит

Что я уже пробовал:

Dim count As Integer = 0
        Dim table As DataTable = New DataTable
        Dim accConnection As New OleDb.OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0; Data Source='C:\Machine.mdb';User Id=admin; Password=;")
        Dim sqlConnection As New SqlClient.SqlConnection("Data Source=10.75.24.94;Initial Catalog=CTData;User ID=sql;Password=")
        Try
            'Import the Access data
            accConnection.Open()
            Dim accDataAdapter = New OleDb.OleDbDataAdapter("SELECT * FROM Slot_Vision_Counters_table", accConnection)
            accDataAdapter.Fill(table)
            accConnection.Close()
            'Export to MS SQL
            For Each row As DataRow In table.Rows
                row.SetAdded()
                count = count + 1
            Next


### Code for inserting the data to SQL?


        Catch ex As Exception
            If accConnection.State = ConnectionState.Open Then
                accConnection.Close()
            End If
            If sqlConnection.State = ConnectionState.Open Then
                sqlConnection.Close()
            End If
            MessageBox.Show("Import failed with error: " & Environment.NewLine & Environment.NewLine _
            & ex.ToString)
        End Try

CHill60

Вместо того чтобы помещать данные в datatable, почему бы просто не использовать оператор "INSERT INTO SQLtable VALUES ..." в sqlconnection? Это не самый быстрый способ, но он сработает.
В качестве альтернативы настройте таблицу SQL как связанную таблицу с базой данных Access и просто используйте запрос доступа в строках "INSERT INTO SQLTable SELECT ... insert field list ... Из Slot_vision_counters_table"

peterjames09

Проблема в том, что я буду импортировать около 20 000 записей каждый день с 11 из этих машин, я просто беспокоюсь о том, что компьютер висит целую вечность, просто упакуйте его в середине импорта.

CHill60

Хорошая точка. Однако вы можете поместить элементы управления вокруг него и транзакций. В качестве альтернативы, почему бы не захватить информацию в базе данных SQL в первую очередь и вырезать базу данных Access?

1 Ответов

Рейтинг:
1

RickZeeland

Смотрите пример здесь: Передача данных с помощью SqlBulkCopy и Visual Basic[^]