2015-07-30 6 views
1

Я Огромные данные говорят 45,00,000 строк данных в файле блокнота,
я разделил этот Gaint файл в маленькие файлы,
у меня есть данные следующим образом:Массовое извлечение данных в файл БД в C#

('1','dsamp','tty','tmp'....) 
and so on 

Теперь я читаю файлы один за другим и используя скрипт insert и кусок кода C#, я пишу их в файл .mdf, но когда я получу ошибку, я не могу найти, где ошибка, и Я хочу начать с начала и вставить из строки 0.
Есть ли лучший способ или код или инструмент для этого Мой код выглядит следующим образом

private void Form1_Load(object sender, EventArgs e) 
    { 
     int i = 0; 
     try 
     { 
      string const_state = "INSERT INTO Authors1 VALUES"; 
      string conn = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=c:\users\srikanth\documents\visual studio 2013\Projects\WindowsFormsApplication1\WindowsFormsApplication1\SampleDB.mdf;Integrated Security=True;Connect Timeout=30"; 
      SqlConnection cn = new SqlConnection(conn); 
      cn.Open(); 
      SqlCommand cmd = new SqlCommand(); 
      cmd.Connection = cn; 
      string line; 

      System.IO.StreamReader file = new System.IO.StreamReader("C:\\Users\\Public\\New1.txt"); 
      while ((line = file.ReadLine()) != null) 
      { 
       line = line.Trim(); 
       line = line.TrimEnd(',', ',',',', '.'); 
       cmd.CommandText = const_state + line+";"; 
       cmd.ExecuteNonQuery(); 
       i++; 
      } 
      MessageBox.Show(i.ToString()); 

      file.Close(); 
     } 
     catch(Exception ex) 
     { 
      MessageBox.Show(i.ToString()); 
      MessageBox.Show(ex.ToString()); 
     } 

    } 
} 

}


Заранее спасибо

+0

Можете ли вы показать нам свой код? Похоже, вам просто нужно переделать свою обработку ошибок, чтобы лучше понять ошибки (т. Е. Какой файл содержит неудавшиеся данные, каков был сбой и т. Д.). –

ответ

0

Что бы я сделал это, имеющий try/catch блок для вашего ExecuteNonQuery() вызова. Что-то вроде этого:

 while ((line = file.ReadLine()) != null) 
     { 
      line = line.Trim(); 
      line = line.TrimEnd(',', ',',',', '.'); 
      cmd.CommandText = const_state + line+";"; 
      try 
      { 
       cmd.ExecuteNonQuery(); 
      } 
      catch 
      { 
       // dump cmd.CommandText somewhere as well as 
       // the actual exception details 
       // 
       // that'll give you two things: 1) the specific 
       // issue, and 2) the actual INSERT statement that 
       // failed 
      } 
      i++; 
     } 

Смотрите мои комментарии в catch { } блока о том, как я бы обрабатывать ошибку ВСТАВИТЬ

Имея try/catchExecuteNonQuery() вокруг вызова, вы будете иметь зернистую вопрос о которыйINSERT заявление не выполнено, а также конкретное исключение с ошибкой. Другим преимуществом этого является то, что это позволит вам продолжить выполнение вместо того, чтобы пузырить это исключение до внешней логики try/catch. Если, конечно, вы не хотите прекратить выполнение, и в этом случае вы можете просто перестроить исключение из внутреннего блока catch { }. Все зависит от того, как вы хотите справиться с ошибкой.

Примечание: для вашего внешнего try/catch блока, вы должны включать в себя finally { } где вы называете SqlConnection.Dispose() освободить соединение и распоряжаться объектом (cn.Dispose()).

+0

Да, это должно решить проблему с ошибками, а как насчет времени, для чтения 45 000 000 строк будет тяжелая работа, есть ли решение для этого? –

+0

@SrikanthSuryadevara Вы ссылаетесь на продолжительность чтения данных из текстовых файлов * или * на длительность вставки данных в таблицу базы данных? –

+0

Чтение из текстовых файлов + запись в DB –