繁体   English   中英

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

[英]Bulk Data insert from CSV to SQL Server using Console Application

需要插入一个大约6MB,13万行的本地.csv文件。 我需要在ac#程序中打开文件,插入每一行,每一行都有特殊考虑(每个字段两边的引号)。

想知道解决此问题的最佳方法,因为我从未编写过ac#app将插入内容插入数据库。 我已经直接在数据库上完成了以下操作,但是现在需要在ac#应用程序中执行此操作。

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();来忽略它们。 欢迎为ac#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();
            }
        }

您有几种选择:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM