从文本文件中逐行读取并保存到数据库

时间:2015-11-02 16:29:54

标签: c#

这是我的代码:

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

但是我无法将所有行保存到数据库中?

2 个答案:

答案 0 :(得分:3)

您在声明字段后循环,并且永远不会重置它们。您希望遍历文件,获取字段,并在每次迭代中保存它们:

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语句中。

答案 1 :(得分:1)

你离得太远了。让我们简化一下:

{{1}}

如果您的源文件相当大,并且需要从其中流出行,那么另一个回答者会显示该方法。