需要插入一个大约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();
}
}
答案 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/