2010-12-14 3 views
1

У меня есть консольное приложение в C#, который извлекает 20 полей из оракула DB witht он ниже код и я хотел эффективный способ, чтобы вставить их в SQL 2005.C# 20000 записей, выбранные из оракула необходимости вставить в SQL2005

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

мысли?

Псевдо код будет приятным, так как я новичок в oracle.

это мой код, где я тестировал получение соединения с оракулом и видел, могу ли я просматривать данные ... теперь я могу просмотреть его, я хочу получить его и в sql2005 ... что я делаю с Вот?

static void getData() 
{ 
    string connectionString = GetConnectionString(); 
    using (OracleConnection connection = new OracleConnection()) 
    { 
     connection.ConnectionString = connectionString; 
     connection.Open(); 

     OracleCommand command = connection.CreateCommand(); 
     string sql = "SELECT * FROM BUG"; 
     command.CommandText = sql; 

     OracleDataReader reader = command.ExecuteReader(); 
     while (reader.Read()) 
     { 
      //string myField = (string)reader["Project"]; 
      string myField = reader[0].ToString(); 
      Console.WriteLine(myField); 
     } 
    } 

} 
+4

Принимая разрешения, вы могли бы использовать экземпляр Linked Server из SQL Server (или dblink из Oracle), чтобы напрямую подключать базы данных для импорта данных. –

+1

Если вы собираетесь делать это на регулярной основе, подумайте об использовании SSIS. Это своего рода сила, и она с радостью будет оптимизирована для объемных вставок. –

+0

Я бы рекомендовал обернуть ваш 'OracleDataReader reader = ...' в 'use', а также. –

ответ

1

Вы можете создать файл CSV, а затем использовать BULK INSERT для вставки файла в SQL Server. Посмотрите пример here.

+0

вы можете объяснить немного больше о том, как сгенерировать csv. Я понимаю, как импортировать его из статьи (спасибо) – kacalapy

+0

Если у вас есть подключение и выбор привилегий на db оракула, вы, вероятно, можете использовать пакет UTL_FILE для извлечения данных в виде файла csv. Вероятно, вам понадобятся права администратора на хост-сервер. Если нет, попробуйте приложение SQL Developer для Oracle DB, вы можете извлечь файл как CSV через приложение. – suhprano

0

Вставка «bulk» с кэшированным набором данных будет работать точно так же, как цикл while, который вы не хотите писать! Проблема в том, что вы потеряете контроль над процессом, если попытаетесь использовать «объемную» вставку класса Dataset. В конце концов, это посторонняя работа.

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

0

Фактически вы можете сделать 100-1000 вставок на каждый пакет. Просто сгенерируйте несколько вставок, затем отправьте. Предварительно создайте следующую SELECT-последовательность, ПЕРВЫЕ ИСПОЛНИТЕ.

+1

.NET-провайдер не работает с партиями, как мы можем это сделать? Я никогда не мог запускать партии. – Aliostad

Смежные вопросы