Csv文件到Sql-database c#

时间:2015-01-20 14:13:20

标签: c# mysql sql-server csv

使用C#.net sql-database存储.csv文件中本地收集的信息的最佳方法是什么?我的理由是 1:我要处理的数据很大(每个csv中有数百万行)。 2:数据非常精确,因为它描述了纳米尺度上的测量结果,因此非常精细。

我的第一个问题是将csv的每一行存储在数据库中的对应行中。我是使用DataTable.cs-class完成的。完成后,我觉得如果在解析.csv文件时出现问题,我就不会注意到了。

我的第二个问题是将.csvfiles上传到.csv格式的数据库中,然后在用户请求时将文件从数据库解析到本地环境。如果甚至可以在c#.net中使用visual stuido 2013,那怎样才能以高效安全的方式完成呢?

3 个答案:

答案 0 :(得分:1)

我在项目中使用了来自csv reader的.Net DataStreams库。它使用SqlBulkCopy类,但它不是免费的。

示例:

    using (CsvDataReader csvData = new CsvDataReader(path, ',', Encoding.UTF8))
    {
        // will read in first record as a header row and
        // name columns based on the values in the header row
        csvData.Settings.HasHeaders = true;

        csvData.Columns.Add("nvarchar");
        csvData.Columns.Add("float"); // etc.

        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
        {
            bulkCopy.DestinationTableName = "DestinationTable";
            bulkCopy.BulkCopyTimeout = 3600;

            // Optionally, you can declare columnmappings using the bulkCopy.ColumnMappings property

            bulkCopy.WriteToServer(csvData);
        }
    }

答案 1 :(得分:1)

听起来您只是在询问是否应该在数据库中存储源CSV的副本,因此如果出现导入​​错误,您可以查看事后发生的事情。

在我看来,这可能不是一个好主意。它立即让我问,你怎么知道发生了错误?您当然不应该依赖人类注意到错误,因此您必须开发一种以编程方式检查错误的方法。如果您有自动错误检查方法,则应在导入时应用该方法,并首先避免错误。你在这里看到循环逻辑吗?

也许我错过了一些东西,但我没有看到存储CSV的好处。

答案 2 :(得分:0)

您应该使用Bulk Insert。将您的csv文件作为源。 但这只有在可以从运行SQL Server的PC访问该文件时才有效。

Here你也可以找到一个很好的解决方案。简而言之,它看起来像这样:

StreamReader file = new StreamReader(bulk_data_filename);  
CsvReader csv = new CsvReader(file, true,',');  
SqlBulkCopy copy = new SqlBulkCopy(conn);  
copy.DestinationTableName = tablename;  
copy.WriteToServer(csv);