我将逗号分隔的CSV文件加载到作为C#中的XSLT转换的一部分生成的String值中 - (CLR程序集,控制台应用程序)。
我需要使用此C#应用程序将此CSV文件输出到数据库表中,一次输出1行。因为我对C#缺乏经验,所以我不知道如何最好地实现这个目标!
在SQL中,我通过以下SQL语句管理它:
INSERT INTO CsvData
(ID, sFilename, iLineCount, sData, dDate)
SELECT @ID, @Filename, id, val, CAST(getdate() as smalldatetime)
FROM dbo.split(@CSVFile,char(13))
dbo.split函数接受@CSVFile并且它是Delimeter(在这种情况下为char(13))并返回一个在CSVFile中每行有1行的表(id = identity,val = Linedata),然后使用填充CsvData表。
我无法将@CSV文件作为参数传递给SQL StroedProc,因为它可能非常大,所以要将它全部保存在C#代码中。
我如何才能在.NET中实现这一目标?
答案 0 :(得分:1)
您可以使用.NET SqlClient提供程序中的 SqlBulkCopy 类。检查this MSDN article的用法。它提供了关于批量插入的良好性能。但是,您必须首先以结构化格式从CSV读取数据,因为SqlBulkCopy需要DataTable或IDataReader才能工作。您有两个选择:
由于您说您的CSV正在加载到String值中,因此用数据填充DataTable不会有问题。使用此DataTable作为SqlBulkCopy.WriteToServer方法的参数。
答案 1 :(得分:0)
尝试LINQ to CSV。
http://blogs.msdn.com/b/ericwhite/archive/2008/09/30/linq-to-text-and-linq-to-csv.aspx
这个实现意味着迭代而不是批量插入,但