CSharp - 读取制表符分隔的文件但任何未格式化行到达它应该忽略这些行并保持prosessing的下一行

  显示原文与译文双语对照的内容
0 0

1 ) 我在下面有一个文本文件。


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

2 ) 下面的代码非常适合阅读这里文本文件并将数据插入数据库。 这是我的代码。我使用的是英镑的C#


//Reading all lines of Text file
string[] alllines = File.ReadAllLines(@"D:test1.txt");
for (int i = 1; i <alllines.Length; i++)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = @"DataSource=.SQLEXPRESS;AttachDbFilename=|DataDirectory|Database.mdf;Integrated Security=True;User Instance=True";
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
//each word in line will be store in array when tab dilimiter arrive
string[] items = alllines[i].Split(new char[] { 't','n' }).ToArray<string>();
string Name = items[0].ToString();
string Email = items[1].ToString();
string Pwd = items[2].ToString();
//insert each word into database
cmd.CommandText ="insert into Employees values('" + Name +"','" + Email +"','" + Pwd +"')";
 cmd.CommandType = CommandType.Text;
 SqlDataReader dr = cmd.ExecuteReader();
 conn.Dispose();
 Label1.Visible = true;
 Label1.Text ="Data Successfully Inserted into Database.";
 }

3 ) 但我的代码无法读取文本文件时,文件就像。


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

4 ) 我想要的只是,只要这种非格式化行到达它就应该忽略它并处理下一行。 或者每当分隔符到达它开始处理

5 ) 你可以使用 StreamReader,并且可以逐行读取文件行。

时间: 原作者:

0 0

if(items.Length!= 3) 会告诉你拆分是否正确发生。

我所做的一些更改是:

  1. 对sql连接使用了使用语句
  2. 使用var实例化变量
  3. 添加了if语句以测试有效的拆分
  4. 使用foreach循环而不是循环循环来提高可读性
  5. 将状态移到循环之外,以便仅在结束时显示。
  6. 使用ExecuteNonQuery而不是 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
 }
}

原作者:
...