Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 逐行读取文本文件并保存到数据库_C# - Fatal编程技术网

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:你说得对!我不想那样