Копировать данные из одной базы данных в другую, используя VB.NET - PullRequest
1 голос
/ 01 февраля 2010

Мне нужно скопировать данные из одной базы данных в другую, используя программу VB.NET.Целевой базой данных является SQL Server, исходной базой данных является некоторая проприетарная ODBC-совместимая база данных.

Мне нужно перебрать список таблиц для копирования.Считайте данные из таблицы исходной базы данных на заданную дату изменения.Удалите соответствующую дату из целевой таблицы базы данных и вставьте записи из исходной таблицы.Базы данных имеют одинаковую структуру, то есть имена таблиц и имена полей, но типы данных могут отличаться (однако они совместимы, например, двойной в источнике, с плавающей точкой в ​​цели).Первичных ключей не существует.

Вот как я могу это сделать:

Сначала выполните команду Delete для цели.Затем я мог бы использовать DataReader для получения данных из источника, перебрать элементы и создать команду вставки для каждой строки.Добавьте параметры в команду с соответствующими значениями и выполните.И обернуть все это в транзакцию.

Мне просто было интересно, не упустил ли я здесь трюк.Любые предложения

Ответы [ 4 ]

2 голосов
/ 01 февраля 2010

Я думаю, что вы должны использовать право на работу, и я предполагаю, что в данном случае это SSIS, но я могу ошибаться, и, возможно, вы уже изучили этот путь.

В этом случае да, считыватель данных будет делать вывод, сколько у вас данных. Данные могут быть даже проще и быстрее для программирования (не нужно беспокоиться о типах данных, так как об этом должен позаботиться адаптер.

0 голосов
/ 05 июня 2013
Dim reader As System.IO.DirectoryInfo
        reader = My.Computer.FileSystem.GetDirectoryInfo("c:\program Files\Microsoft SQL Server\MSSQL.1\mssql\data")
        If (reader.Attributes And System.IO.FileAttributes.ReadOnly) > 0 Then
            MsgBox("File is readonly!")
        Else
            MsgBox("Database is not read-only protected")
        End If

Сначала проверьте все таблицы

0 голосов
/ 01 февраля 2010

Взгляните на класс SqlBulkCopy . Если вы можете получить исходный код в DataTable или прочитать его с помощью IDataReader, тогда это приемлемо. Он также будет пытаться конвертировать между совместимыми типами. См. Операции однократного массового копирования для получения более подробной информации.

Это было бы более желательно, чем использование операторов INSERT для каждой строки.

0 голосов
/ 01 февраля 2010

Хитрость заключается в том, чтобы использовать операции на основе множеств, а не концепцию «строка за раз», которую мы, программисты, впервые научили:)

Вот какой-то псевдокод

INSERT INTO DestTable (columns, columns...)
(Select ModifiedRow from SourceTable where date = Modified)

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

Я бы предпочел поместить этот код в шаг работы и запланировать на SQL.Это также может быть хранимая процедура, запускаемая из .net.

Кроме того, использование SSIS для передачи из db в db, скорее всего, излишне, если вы не собираетесь использовать некоторые из специальных преобразований.

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