0

我有一个任务,我需要读取一个文本文件,然后将每一行分解为列,然后我需要将其插入数据库。

最好的方法是什么?任何帮助将不胜感激,如果您能提供代码会更好。

这是我到目前为止所拥有的

    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();



    }
4

3 回答 3

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[]

写入数据库

您现在可以读取文件。现在,您需要将其写入数据库。大概有一个与文件中的数据匹配的给定模式的数据库表。查看 ADO.Net 以了解如何写入数据库并根据需要提出具体问题。

http://msdn.microsoft.com/en-us/library/h43ks021(v=vs.100).aspx

于 2012-07-24T03:28:35.873 回答
0

这听起来像你必须有带有分隔符的文本文件。将数据分隔成列的分隔符,例如

数据1,数据2,数据3,数据4

分隔符可以是逗号或任何其他未出现在常规数据中的字符。如果你有这种格式的文本文件,很容易解析它并将其推送到数据库。

方法可能是 - 您使用 StreamReader 打开文件。逐行读取文件,即一次读取一行。通过指定分隔符将行拆分为列。

string[] lineData = sr.ReadLine().split('delimiter');
foreach(string colData in lineData)
{
     //store data into appropriate collections and push it to database
}
于 2012-07-24T03:27:55.410 回答
0

除了已经建议的其他解析技术之外,您还可以将TextFieldParser类(它位于 Microsoft.VisualBasic.FileIO 命名空间中)与您已经编写的 ADO.Net 代码结合使用

于 2012-07-24T04:22:00.590 回答