Code Bye

关于循环读取txt表内数据到数据库中

Hi,各位高手,
想实现这样一个逻辑,假设:文件夹内有10个txt文本文档,里面每个对应一个sql内的表,且每个文本文档(以及sql中的表)列数均不同。
这边本人读取了每个txt的路径。然后每个字段用”|”符号隔开。
本人想实现每个txt文本文件自动匹配sql里的表,且列也自动匹配,而不是写10个case.每个case需要写几十个columns.add.放在datatable 中。有什么好办法吗?
private void button1_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
//dt.Columns.Add(“a”);
//dt.Columns.Add(“b”);
//dt.Columns.Add(“c”);
//dt.Columns.Add(“d”);
foreach (string filename in Directory.GetFiles(“D:\InstinctData”, “*.txt”, SearchOption.AllDirectories))
{
Console.WriteLine(filename);
string strFilePath = filename;
FileStream fs = new FileStream(strFilePath, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs, System.Text.Encoding.Unicode);
SqlConnection conn = new SqlConnection();
conn.ConnectionString = “Data Source =.;Database=~;Uid=~;Pwd=~”;
conn.Open();
string strLine = sr.ReadLine();
while (strLine != null)
{
string[] strArray = new string[4];
strArray = strLine.Split(“|”);
DataRow dr = dt.NewRow();
dr[0] = strArray[0];
dr[1] = strArray[1];
dr[2] = strArray[2];
dr[3] = strArray[3];
string sql = “insert into A_Test values(“” + dr[0] + “”,”” + dr[1] + “”,”” + dr[2] + “”,”” + dr[3] + “”)”;
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
dt.Rows.Add(dr);
strLine = sr.ReadLine();
}
sr.Close();
fs.Close();
conn.Close();
//string filecontent = string.Join(“\r\n”, System.IO.File.ReadAllLines(filename));
//Console.WriteLine(filecontent);
}
}
求高手给点小代码启发一下。原因是这边是insert 语句,必须注明列的。很困难。
或先把sql表中的列读取到gridview中?然后循环列写在insert语句中?
本人这边假设有100个columns怎么办?
谢谢
解决方案

30

假如你txt的文件名包含表名,那么表就能匹配了,假如你txt内容的第一行存字段名,那么列也能匹配。不管多少列,用一个循环来建DataTable,不需要 case。

40

1、CSVHelper读取成实体集合(看你这描述txt数据格式就是csv格式)
2、ORM映射
3、循环插入数据库
其实说白了就是怎么读,然后ORM怎么来做插入数据库的事情
假如txt数据量很大,但要求读取时间又很短的话,那还真必须DataTable,然后通过SqlBulkCopy插入数据库

30

sqlbulkcopy是看你的datatable的列类型能否一致的

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于循环读取txt表内数据到数据库中