这是我的代码:
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
但是我无法将所有行保存到数据库中?
答案 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}}
如果您的源文件相当大,并且需要从其中流出行,那么另一个回答者会显示该方法。