sql2008 . net 3.5在.net中多行插入

本文关键字:net 插入 sql2008 | 更新日期: 2023-09-27 18:04:23

我有一个逗号分隔的CSV文件被加载到作为c# (CLR程序集,控制台应用程序)中XSLT转换的一部分生成的字符串值中。

我需要得到这个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和它的分隔符(在本例中为char(13)),并返回CSVFile中每行1行的表(id=identity, val=Linedata),然后用于填充CsvData表。

我不能将@CSVfile作为参数传递给SQL StroedProc,因为它可以变得非常大,所以我想把它全部包含在c#代码中。

如何在。net中最好地实现这一点?

sql2008 . net 3.5在.net中多行插入

可以使用。net SqlClient提供程序中的SqlBulkCopy类。请查看此MSDN文章了解其用法。它在批量插入方面提供了良好的性能。但是,您必须首先以结构化格式从CSV中读取数据,因为SqlBulkCopy需要DataTable或IDataReader才能工作。你有两个选项:

  1. 将整个CSV文件加载到DataTable对象中,如果您的CSV文件非常大,这可能不是最好的解决方案
  2. 为CSV文件创建一个只读的、只能前进的光标。你可以在网上找到一些实现。

既然你说你的CSV正在被加载到一个字符串值,那么用数据填充一个DataTable就不是问题了。使用这个数据表作为SqlBulkCopy的参数。WriteToServer方法。

尝试LINQ to CSV。

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

这个实现意味着迭代而不是批量插入,尽管