使用控制台应用程序将批量数据从CSV插入到SQL Server

时间:2014-07-17 03:36:02

标签: c# sql sql-server csv

需要插入一个大约6MB,130k行的本地.csv文件。我需要在c#程序中打开文件,插入每一行,每行都有特殊注意事项(每个字段周围的引号)。

想知道最好的方法,因为我从来没有写过c#app插入数据库。我直接在DB上完成了以下操作,但现在需要在c#app中执行此操作。

BULK
INSERT CSVTest
FROM 'c:\csvtest.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO

.csv文件中的示例数据如下所示,在从c#插入数据库时​​如何删除引号时我有点遗失。我是否需要在c#中指定列名,还是可以插入类似于T-SQL查询的内容?

Copyright (c) 2011 MaxMind Inc.  All Rights Reserved.
"beginIp","endIp","beginIpNum","endIpNum","countryCode","countryName"
"1.0.0.0","1.0.0.255","16777216","16777471","AU","Australia"
"1.0.1.0","1.0.3.255","16777472","16778239","CN","China"
"1.0.4.0","1.0.7.255","16778240","16779263","AU","Australia"

对于前两行,我知道我需要做2个阅读器。阅读();忽略它们。欢迎任何有关c #newb的帮助!整个.csv文件中的字段完全相同,因此这不是问题。只是不知道是否有一种简单的方法可以通过c#将数据从大型csv插入到SQL中。提前谢谢!

编辑:

我现在正在使用的,在TGH的示例链接中,即使在引号内也可以获得.csv字段。现在只需要通过SQL连接插入。

using (TextFieldParser parser = new TextFieldParser(@"C:\StreamReadTest.csv"))
        {
            parser.SetDelimiters(new string[] { "," });
            parser.HasFieldsEnclosedInQuotes = true;

            // Skip over header line.
            parser.ReadLine();
            // Skip field descriptions line.
            parser.ReadLine();

            while (!parser.EndOfData)
            {
                string[] fields = parser.ReadFields();

                foreach (var value in fields)
                {
                    Console.WriteLine(value);
                }

                Console.WriteLine("\n");
                Console.ReadKey();
            }
        }

1 个答案:

答案 0 :(得分:2)

您有几种选择:

您可以创建一个SqlCommand并运行您在上面定义的原始sql字符串。或者,您可以将sql包装在存储过程中,并使用Ado.net从.Net调用它。

另一种方法是解析文件并通过.Net(ado.Net或ORM,如Entity Framework)保存各行。 我会考虑查看以下库(在csv解析器中内置.net)来解析文件: http://coding.abel.nu/2012/06/built-in-net-csv-parser/