C# 无需集成服务即可将文本文件批量插入到sql server的最快方法

C# 无需集成服务即可将文本文件批量插入到sql server的最快方法,c#,sql-server,C#,Sql Server,我有以下要求 客户将把一个文件放在一个大小为600MB的文件夹中,我需要一个Windows服务来轮询该文件夹,一旦一个新文件被放到那里,我需要处理它并插入SQL Server 推荐的最快方式是什么?ADO.NET,每行插入一个?您有什么建议吗?使用SQL server的大容量插入功能 请参见我建议使用ADO.NET,但不要按行插入。如果一个文本文件中有600MB的行,那么这可能会让人难以置信地感到费劲。而是创建一个用户定义的表类型 CREATE TYPE [dbo].[MyTable] AS T

我有以下要求

客户将把一个文件放在一个大小为600MB的文件夹中,我需要一个Windows服务来轮询该文件夹,一旦一个新文件被放到那里,我需要处理它并插入SQL Server


推荐的最快方式是什么?ADO.NET,每行插入一个?您有什么建议吗?

使用SQL server的大容量插入功能


请参见

我建议使用ADO.NET,但不要按行插入。如果一个文本文件中有600MB的行,那么这可能会让人难以置信地感到费劲。而是创建一个用户定义的表类型

CREATE TYPE [dbo].[MyTable] AS TABLE
(
    [Col1] INT NOT NULL,
    [Col2] NVARCHAR(10) NOT NULL,
    [Col3] NVARCHAR(250) NOT NULL
)
然后在C#中创建一个数据表

var dt = new DataTable("MyTable");
dt.Columns.Add("Col1", typeof(int));
dt.Columns.Add("Col2", typeof(string));
dt.Columns.Add("Col3", typeof(string));
使用此语法加载它

dt.Rows.Add(someVar1, someVar2, someVar3);
批量加载数据表,然后像其他任何参数一样将数据表作为参数提交给SQL

command.Parameters.Add(new SqlParameter { ParameterName = "Values", Value = dt });
CREATE PROCEDURE [ive].[myProc]
@Values [dbo].[MyTable] READONLY
存储过程应使用该参数

command.Parameters.Add(new SqlParameter { ParameterName = "Values", Value = dt });
CREATE PROCEDURE [ive].[myProc]
@Values [dbo].[MyTable] READONLY
然后简单地在存储过程中使用它,就像在表中一样。如果批量插入在任何步骤失败,您可以将流程包装在事务中,并使用其他一些逻辑来纠正问题。

使用一个团队,与一个自定义
IDataReader一起使用自定义处理访问您的文件……您也可以尝试