繁体   English   中英

在sql2008 .NET 3.5的.NET中进行多行INSERT INTO

[英]Multi line INSERT INTO in .NET on sql2008 .NET 3.5

我有一个逗号分隔的CSV文件,正在加载到一个字符串值中,该字符串值是C#中XSLT转换的一部分-(CLR程序集,控制台应用程序)。

我需要获得此C#应用程序才能将此CSV文件一次输出到数据库表中。 而且由于我对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表。

我不能将@CSVfile作为参数传递给SQL StroedProc,因为它可能会变得很大,因此希望将其全部包含在C#代码中。

我如何最好地在.NET中实现这一目标?

您可以使用.NET SqlClient提供程序中的SqlBulkCopy类。 查看此MSDN文章以了解其用法。 它在散装刀片方面提供了良好的性能。 但是,您必须首先以结构化格式从CSV读取数据,因为SqlBulkCopy需要一个DataTable或IDataReader才能起作用。 您有2个选择:

  1. 将整个CSV文件加载到DataTable对象中,如果您的CSV文件很大,则可能不是最佳解决方案
  2. 创建一个CsvDataReader作为CSV文件的只读,仅向前的游标。 您可以在网上找到一些实现。

因为您说的是CSV正在加载到String值中,所以用数据填充DataTable并不是问题。 将此DataTable用作SqlBulkCopy.WriteToServer方法的参数。

尝试LINQ to CSV。

http://blogs.msdn.com/b/ericwhite/archive/2008/09/30/linq-to-text-and-linq-to-csv.aspx

尽管此实现将意味着迭代而不是批量插入

暂无
暂无

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

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