3

我在客户端有一个 CSV 文件,我想开发一个 C# 应用程序来将数据批量插入数据库的表中以最小化日志输出。我对是否在客户端使用 ADO.NET 来调用数据库服务器中的存储过程感到困惑。什么样的代码需要在客户端开发,什么样的代码需要在服务器端以存储过程的形式实现?

但我没有从谷歌找到任何样本。有哪些即用型样品?:-)

编辑:更多信息:

我在客户端有很多数据,我想导入数据库,但我不想要所有许多事务日志的开销。出于安全原因,我想在服务器端开发一个存储过程并从客户端(ADO.NET)调用。我想知道实现这样的目标。服务端存储过程需要开发什么样的T-SQL,客户端如何高效调用/填充数据?

如果还有什么不清楚的地方,请随时告诉我。

4

2 回答 2

8

您可以将CsvReader 连接到 SqlBulkCopy,它可以很好地完成这项工作......类似于(未经测试):

using (CsvReader reader = new CsvReader(path))
using (SqlBulkCopy bcp = new SqlBulkCopy(CONNECTION_STRING))
{
    bcp.DestinationTableName = "SomeTable";
    bcp.WriteToServer(reader);
}

编辑您通常会将批量插入到临时表中,然后使用常规存储过程将数据移动到实际表中。

于 2009-03-19T13:29:07.897 回答
1

您使用的是 SQL Server 2008 吗?您是否能够执行动态 SQL(不是我提倡的)?

如果是这样,您可以构造一个使用“行构造函数”的插入语句。本质上,插入语句现在将接受每一行的参数数组,如下所示:

INSERT INTO TableA (Col1, Col2)
VALUES ('A', 'B'), ('C', 'D')

在博客文章“ SQL Server 2008 – 使用一个插入语句插入多条记录 – 行构造函数的使用”中有更多关于它的内容。

我希望这有帮助。

于 2009-03-19T13:37:08.267 回答