从CSV导入数据

时间:2010-07-14 18:58:05

标签: c# asp.net csv

好的,这开始是将​​客户数据导入数据库的一项非常简单的任务。下面的脚本将所有数据加载到内存中,然后允许操作。

string ConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"" + FileLoc + "\"; Extended Properties=\"text;HDR=Yes;FMT=Delimited(,)\"";

using (OleDbConnection conn = new OleDbConnection(ConString))
{
    using (OleDbCommand cmd = new OleDbCommand("SELECT * FROM DataInput.csv", conn))
    {
        conn.Open();

        using (OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
        {
            int RowNumber = 0;
            while (dr.Read())
            {


                if(RowNumber==0)
                {
                    for (int i = 0; i < dr.FieldCount; i++)
                    {
                        TitleData.Add(new CSVTitleData() {ColumnID = i,ColumnName = dr.GetValue(i).ToString()});
                    }
                }
                else
                {
                    var DataToInsert = new List<CSVData>();
                    for (int i = 0; i < dr.FieldCount; i++)
                    {
                        if (i == 8)
                        {
                            var A = dr.GetValue(i);
                            Console.WriteLine(A.GetType().ToString() + " - " + i);
                        }
                        DataToInsert.Add(new CSVData(){ColumnID = i,Value = dr.GetValue(i).ToString()});
                    }

                    Content.Add(DataToInsert);
                }
                RowNumber++;
            }
        }
    }
}

这样可以正常工作,直到有

这样的数据
4950
4951
4952
4998
2024
4176
7025-1
RVAC010
RVAC011
4945
4946
4947
4948

Excel尝试变得聪明并将每个字段作为Int读取。结果是那些字母被读作DBNull。

现在我已经做了一些阅读,很多人都有这个问题,但没有可靠的解决方案。一个可能的解决方案是创建一个Scheme.ini我想知道是否有人可以帮助我确切的格式?

或许在CSV中阅读更容易?

3 个答案:

答案 0 :(得分:4)

我对此有相同的经验....我在codeproject找到了很棒的库来读取CSV文件:

http://www.codeproject.com/KB/database/CsvReader.aspx

库可以处理所有内容,例如正确解析CSV,因此您不必担心这些问题。它非常易于使用,数据可以通过DataTable返回。

它已成为我的代码库的重要组成部分我强烈建议您查看它。

答案 1 :(得分:2)

我建议放弃Excel,并使用符合LINQ to CSV的内容来处理您的处理。您可以消除对Excel的依赖性,直接控制打字,以及更轻的引导权重。

http://www.codeproject.com/KB/linq/LINQtoCSV.aspx

答案 2 :(得分:1)

我最喜欢的读取文件的方法是使用外部库 http://www.filehelpers.com/

说明
FileHelpers是一个免费且易于使用的.NET库,用于从文件,字符串或流中的固定长度或分隔记录中导入/导出数据。

它拥有一切,厨房下沉,但仍然很小..

在asp.net应用程序中运行excel绝不是一个好主意,而且微软也禁止运行excel。

你总是可以尝试ODBC,它有一种方法可以为一个微软唯一的解决方案指定带有ini文件的布局,尽管ODBC的日期已编号