2015-11-02 43 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(); 
     } 
    } 
} 
相關問題