C# 逐行读取文本文件并保存到数据库
这是我的密码:C# 逐行读取文本文件并保存到数据库,c#,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 SqlCon
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();
}
}
}
但我无法将所有行保存到数据库?您离得不远。让我们简化一下:
// 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 contain 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 strings, no ToString()s needed
cmd.Parameters.AddWithValue("@hoten", fields[1]);
cmd.Parameters.AddWithValue("@diachi", fields[2]);
cmd.ExecuteNonQuery();
}
}
}
如果您的源文件相当大,并且需要将行从中流出来,那么另一个回答者将显示这种方法。您离此不远。让我们简化一下:
// 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 contain 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 strings, no ToString()s needed
cmd.Parameters.AddWithValue("@hoten", fields[1]);
cmd.Parameters.AddWithValue("@diachi", fields[2]);
cmd.ExecuteNonQuery();
}
}
}
如果您的源文件相当大,并且需要将行从中流出来,那么另一个应答器会显示这种方法。您在声明字段后循环,并且从不重置字段。您希望在文件中循环,获取字段,并在每次迭代中保存它们:
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
,因此建议您也使用语句将其包装在中。在声明字段后循环,并且从不重置它们。您希望在文件中循环,获取字段,并在每次迭代中保存它们:
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
,因此建议您也使用语句将其包装在中。您从第二行开始,是否需要?您也只拆分字段一次,而不是每行拆分一次(将其移动到循环中)。哪些行不能保存到数据库中?他们只是不出现在那里,还是你得到了一个错误?这个问题目前还很不清楚。我猜你们在保存相同的数据两次?第一行,但我不知道how@jonesopolis:你说得对!我不想这样,你是从第二行开始的,是吗?您也只拆分字段一次,而不是每行拆分一次(将其移动到循环中)。哪些行不能保存到数据库中?他们只是不出现在那里,还是你得到了一个错误?这个问题目前还很不清楚。我猜你们在保存相同的数据两次?第一行,但我不知道how@jonesopolis:你说得对!我不想那样