C# 读取以制表符分隔的文件,但无论何时到达任何未格式化的行,它都应该忽略这些行,并从下一行继续前进

C# 读取以制表符分隔的文件,但无论何时到达任何未格式化的行,它都应该忽略这些行,并从下一行继续前进,c#,sqlcommand,C#,Sqlcommand,我下面有一个这样的文本文件 2我下面的代码非常适合读取此文本文件并将数据插入数据库。 这是我的密码。我用的是C 4我想要的只是,无论什么时候,这种未格式化的行到达,它都应该忽略它并处理下一行。或者,只要分隔符到达,它就开始处理 5您可以使用StreamReader并可以逐行读取文件。ifitems.Length!=3将告诉您拆分是否正确 我所做的一些更改是: 对sql连接使用了using语句 使用var实例化变量 添加了if语句以测试有效拆分 使用foreach循环而不是for循环,以便于可读性

我下面有一个这样的文本文件

2我下面的代码非常适合读取此文本文件并将数据插入数据库。 这是我的密码。我用的是C

4我想要的只是,无论什么时候,这种未格式化的行到达,它都应该忽略它并处理下一行。或者,只要分隔符到达,它就开始处理

5您可以使用StreamReader并可以逐行读取文件。

ifitems.Length!=3将告诉您拆分是否正确

我所做的一些更改是:

对sql连接使用了using语句 使用var实例化变量 添加了if语句以测试有效拆分 使用foreach循环而不是for循环,以便于可读性 将状态移到循环之外,使其仅在末尾显示。 使用ExecuteOnQuery而不是ExecuteReader。该语句不返回任何内容,因此不需要读卡器。 这是密码

//Reading all lines of Text file
var allLines = File.ReadAllLines(@"D:\test1.txt");
var connectionString = @"DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|Database.mdf;Integrated   Security=True;User Instance=True";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand cmd = connection.CreateCommand();
    foreach (var line in allLines)
    {
        var items = line.Split(new[] { '\t', '\n' }).ToArray();
        if (items.Length != 3)
            continue;
        var Name = items[0].ToString();
        var Email = items[1].ToString();
        var Pwd = items[2].ToString();
        cmd.CommandText = "insert into Employees values('" + Name + "','" + Email + "','" + Pwd + "')";
        cmd.CommandType = CommandType.Text;
        cmd.ExecuteNonQuery();
    }
    Label1.Visible = true;
    Label1.Text = "Data Successfully Inserted into Database.";
}
此外,在您的sql中更安全。正如本文所述,您很容易受到sql注入攻击

编辑:

要使用streamreader,如下所示:

using (StreamReader sr = new StreamReader(path)) 
{
    while (sr.Peek() >= 0) 
    {
        //contents of foreach loop go here
    }
}

1.将db连接从for循环中拔出。2.在循环中使用foreach。3.如果你的绳子没有分成三部分,就把它扔掉。永远不要连接字符串以插入sql变量。改用参数。我知道如果我的字符串没有分成三部分,我就必须把它扔掉,但不知道逻辑,请解释一下,先生……我对这种语言不熟悉……先生,它向我显示了一个错误,关键字不受支持:'datasource'。Chiraag,那将是你的连接字符串。哦,我相信它应该是数据源而不是数据源。如果是这样的话,你原来的帖子就错了。先生,如果我必须使用stram reader来读取一个文件,那么逻辑是什么呢??有没有办法通过流阅读器逐行读取此文件?@Chiraag,检查我的最新编辑。别忘了投票并标上答案!祝你好运foreach语句无法对“System.IO.StreamReader”类型的变量进行操作,因为“System.IO.StreamReader”不包含“GetEnumerator”的公共定义
Sanjay    sn.mehta@gmail.com  123
Ajay  ap123@yahoo.com 456
Vijay vijymalya@gmail.com 789
------------------------------------------
Sujay spnakum@tahoo.com   141
Jay   jaybhalara@yahoo.com    275
Dhananjay dh@gmail.com    786
//Reading all lines of Text file
var allLines = File.ReadAllLines(@"D:\test1.txt");
var connectionString = @"DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|Database.mdf;Integrated   Security=True;User Instance=True";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand cmd = connection.CreateCommand();
    foreach (var line in allLines)
    {
        var items = line.Split(new[] { '\t', '\n' }).ToArray();
        if (items.Length != 3)
            continue;
        var Name = items[0].ToString();
        var Email = items[1].ToString();
        var Pwd = items[2].ToString();
        cmd.CommandText = "insert into Employees values('" + Name + "','" + Email + "','" + Pwd + "')";
        cmd.CommandType = CommandType.Text;
        cmd.ExecuteNonQuery();
    }
    Label1.Visible = true;
    Label1.Text = "Data Successfully Inserted into Database.";
}
using (StreamReader sr = new StreamReader(path)) 
{
    while (sr.Peek() >= 0) 
    {
        //contents of foreach loop go here
    }
}