Взять 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
Пример можно посмотреть здесь.
Предположительно, этот вариант будет медленнее, чем первый. Но не требует дополнительных библиотек, если данное обстоятельство является проблемой.