我有一个任务,我需要读取一个文本文件,然后将每一行细分为列,然后我需要将其插入数据库。
最好的方法是什么?任何帮助都将是欣赏它,如果你能提供代码将更好。
这是我到目前为止所拥有的
string filename = Server.MapPath("~/Text_File_4.txt");
StreamReader sr = new StreamReader(filename);
string styl;
string colr;
string sdim;
string size;
string qty;
string line;
string sprice;
string sretail;
while ((line = sr.ReadLine()) != null)
{
styl = line.Substring(0, 6);
colr = line.Substring(6, 2);
sdim = line.Substring(8, 1);
size = line.Substring(14, 3);
qty = line.Substring(19, 5);
sprice = line.Substring(27, 6);
sretail = line.Substring(38, 4);
con.Open();
cmd = new SqlCommand("insert into ststyl00(ststyl, stcolr, stsdim, stszcd, stprq, strprq) values(@ststyl, @stcolr, @stsdim, @stszcd, @stprq, @strprq)", con);
cmd.Parameters.Add("@ststyl", SqlDbType.VarChar, 15).Value = styl;
cmd.Parameters.Add("@stcolr", SqlDbType.VarChar, 3).Value = colr;
cmd.Parameters.Add("@stsdim", SqlDbType.VarChar, 8).Value = sdim;
cmd.Parameters.Add("@stszcd", SqlDbType.VarChar, 3).Value = size;
cmd.Parameters.Add("@stprq", SqlDbType.VarChar, 8).Value = sprice;
cmd.Parameters.Add("@strprq", SqlDbType.VarChar, 8).Value = sretail;
cmd.ExecuteNonQuery();
con.Close();
}
答案 0 :(得分:3)
输入为CSV
如果您的输入文件是CSV文件,我强烈建议您使用
中提供的CSV Reader类http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader
输入是固定宽度
如果您的输入是固定宽度的,只需读取所有行并将每一行解析成适当的结构以存储在数据库中(稍后会详细介绍)。
如果您只需要阅读一些文本(可能只有几兆字节或更少),请使用
File.ReadAllLines
http://msdn.microsoft.com/en-us/library/s2tte0y1
将文件的所有行读入 string [] 。
写入数据库
您现在可以读入文件。现在,您需要将其写入数据库。据推测,有一个DB表,其中给定的模式与文件中的数据相匹配。查看ADO.Net以了解如何写入数据库并根据需要提出具体问题。
http://msdn.microsoft.com/en-us/library/h43ks021(v=vs.100).aspx
答案 1 :(得分:0)
这听起来像你必须有带分隔符的文本文件。用于将数据分隔为列的分隔符,例如
data1,data2,data3,data4
分隔符可以是逗号或任何其他未出现在常规数据中的字符。如果你有这种格式的文本文件,那么很容易解析它并将其推送到数据库。
方法可能是 - 您使用StreamReader打开文件。逐行读取文件,即一次读取一行。通过指定分隔符将行拆分为列。
string[] lineData = sr.ReadLine().split('delimiter');
foreach(string colData in lineData)
{
//store data into appropriate collections and push it to database
}
答案 2 :(得分:0)
除了已经提出的其他解析技术之外,您还可以将TextFieldParser类(在Microsoft.VisualBasic.FileIO命名空间中)与您已编写的ADO.Net代码结合使用