2015-11-02 3 views
0

Вот мой код:чтения построчно из текстового файла и сохранить в базе данных

List<string> myValues = new List<string>(); 

string line; 

StreamReader file = new StreamReader(@"D:\a.txt"); 
if ((line = file.ReadLine()) != null) 
{ 
    string[] fields = line.Split(','); 
    using (SqlConnection con = new SqlConnection(@"Data Source=NT;Initial Catalog=SinhVien;Integrated Security=True")) 
    { 

     con.Open(); 
     while((line = file.ReadLine()) != null) 
     { 
     SqlCommand cmd = new SqlCommand("INSERT INTO Sinhvien(ID, HoTen, DiaChi) VALUES (@id, @hoten, @diachi)", con); 
     cmd.Parameters.AddWithValue("@id", fields[0].ToString()); 
     cmd.Parameters.AddWithValue("@hoten", fields[1].ToString()); 
     cmd.Parameters.AddWithValue("@diachi", fields[2].ToString()); 
     cmd.ExecuteNonQuery(); 
     } 
    } 

} 

И мой текстовый файл:

10,Hong,10 hung vuong 

11,Thuy,11 Hung Vuong 

22,Thanh,22 Hung Vuong 

Но я не могу сохранить все строки в базе данных?

+1

Вы начинаете со второй линии, это желательно? Вы также разбиваете поля только один раз не для каждой строки (переместите ее в цикл). –

+1

Какие строки вы не можете сохранить в базе данных? Они просто не появляются там или вы получаете сообщение об ошибке? Вопрос не совсем ясен. – DavidG

+0

Я предполагаю, что вы сохраняете одни и те же данные 2 раза? – Jonesopolis

ответ

2

вы зацикливание после Вы заявляете свои поля, и не сбрасывать их. Вы хотите перебрать свой файл, получить поля, и сохранять их в каждой итерации:

string line; 

using (SqlConnection con = new SqlConnection(@"Data Source=NT;Initial Catalog=SinhVien;Integrated Security=True")) 
{ 
    con.Open(); 
    using(StreamReader file = new StreamReader(@"D:\a.txt") 
    { 
     while((line = file.ReadLine()) != null) 
     { 
      string[] fields = line.Split(','); 

      SqlCommand cmd = new SqlCommand("INSERT INTO Sinhvien(ID, HoTen, DiaChi) VALUES (@id, @hoten, @diachi)", con); 
      cmd.Parameters.AddWithValue("@id", fields[0].ToString()); 
      cmd.Parameters.AddWithValue("@hoten", fields[1].ToString()); 
      cmd.Parameters.AddWithValue("@diachi", fields[2].ToString()); 
      cmd.ExecuteNonQuery(); 
     } 
    } 
} 

StreamReader реализует IDisposable, поэтому желательно вам обернуть его в using заявлении, а также.

0

ИМХО, это большая работа, чтобы достичь вашей цели. Давайте упростим это:

// If the file is small, read it all at once 
string[] lines = File.ReadAllLines(@"D:\a.txt"); 
// TODO: if lines is empty, bail out 
using (SqlConnection con = new SqlConnection(@"Data Source=NT;Initial Catalog=SinhVien;Integrated Security=True")) 
{ 
    con.Open(); 
    // for each line (no ifs or whiles here) 
    foreach (var line in lines) 
    { 
     string[] fields = line.Split(','); 
     // TODO: verify fields contains what you want 
     // SqlCommand implements IDisposable too 
     using (SqlCommand cmd = new SqlCommand("INSERT INTO Sinhvien(ID, HoTen, DiaChi) VALUES (@id, @hoten, @diachi)", con)) 
     { 
      cmd.Parameters.AddWithValue("@id", fields[0]); // these are already string 
      cmd.Parameters.AddWithValue("@hoten", fields[1]); 
      cmd.Parameters.AddWithValue("@diachi", fields[2]); 
      cmd.ExecuteNonQuery(); 
     } 
    } 
} 
Смежные вопросы