C# - Переливка данных из БД MS SQL в БД Oracle

Рейтинг: 1Ответов: 1Опубликовано: 21.04.2015

Есть таблица с одинаковыми именами и типами полей в БД MS SQL и Oracle (типы "одинаковы" насколько это возможно для разных СУБД). Как можно перелить данные с одной таблицы в другую, не перечисляя имена и типы полей явно? Иными словами, как динамически создавать команды INSERT с нужными именами, типами полей и данными?

Ответы

▲ 3Принят

Взять ORM, например linq2db, создать POCO-класс для таблицы, создать два подключения (к MS SQL и Oracle), прочитать данные из источника, залить данные в приемник, используя Bulk Copy. Например:

[Table(Name = "ProductsTemp")]
public class ProductTemp
{
  public int ProductID { get; set; }

  [Column(Name = "ProductName"), NotNull]
  public string Name { get; set; }

  // ... other columns ...
}

list = List<ProductTemp>

using (var db = new DbNorthwind())
{
  db.BulkCopy(list);
}

SQL-запрос для вставки создаст сама ORM. Перечислить колонки все же придется, но только при создании POCO-класса. Вручную запрашивать информацию о таблице, мапить типы данных между двумя СУБД - дело неблагодарное, лучше доверить его ORM.

Еще как вариант - использовать DataTable.

Примерные шаги:

  • считать данные (например, с помощью OracleDataReader)
  • сформировать DataTable
  • залить данные через SqlBulkCopy

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