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

本文关键字:Server 控制台 应用程序 SQL 数据 插入 CSV | 更新日期: 2023-09-27 18:13:26

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

想知道最好的方法去做这个,因为我从来没有写过一个c#应用程序插入到数据库。我已经直接在DB上完成了以下操作,但现在需要在c#应用程序中执行此操作。

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

.csv文件中的示例数据如下,当从c#插入到DB时,我有点不知道如何去掉引号。我需要在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个reader.ReadLine();来忽略它们。欢迎对c#新手的任何帮助!这些字段在.csv文件中是完全相同的,所以这不是问题。只是不知道是否有一种简单的方法可以通过c#将数据从大型csv插入到SQL中。提前感谢!

编辑:

我现在使用的是,漂亮地得到。csv字段,甚至在引号内,给出TGH的示例链接。现在只需要通过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();
            }
        }

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

您有几个选择:

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

另一种方法是解析文件并通过. net (ado)保存单个行。Net或类似ORM的实体框架)我会考虑查看以下库(.net内置的csv解析器)来解析文件:http://coding.abel.nu/2012/06/built-in-net-csv-parser/