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?