1

我有一个问题,我在互联网上寻找了很久很久的答案,但找不到任何东西。

我有一个吸纳网络服务的小应用程序。然后,它通过自己的 Web 服务将此 Web 服务结果传递给另一个应用程序,并将请求存储在一个表中。

我想要做的是快速将结果从数据集中导入到表中。

选项 1 是我遍历数据集中的所有行并在每个行上使用插入。这样做的问题是它很慢,并且会减慢小应用程序 Web 服务的响应速度。

选项2是将数据集批量上传到sql中。对我来说坏消息是我不知道该怎么做!!任何人都可以帮忙吗?

4

4 回答 4

2

您可以使用SqlBulkCopy。一个简单的 SqlBulkCopy 可能如下所示:

DataTable dtMyData = ... retrieve records from WebService
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString)) {
    bulkCopy.BulkCopyTimeout = 120; // timeout in seconds, default is 30
    bulkCopy.DestinationTableName = "MyTable"; 
    bulkCopy.WriteToServer(dtMyData);
}

如果您正在处理大量数据,您可能还需要设置BatchSize属性。

于 2009-05-22T12:22:54.763 回答
0

这听起来像是一个非常忙碌的小型 Web 服务。

您可以改为(甚至另外)考虑将其设为异步或多线程。否则,您刚刚建立了两个 Web 应用程序之间的耦合,您可能首先将它们拆分以避免。

于 2009-05-22T12:31:41.063 回答
0

由于各种原因,使用批量加载可能会很痛苦,首先是您如何执行它是特定于特定 DBMS 的。(通常让您知道的下一件事是需要放置包含数据的文件的位置。)

INSERT但是,您通常可以通过在单个事务中完成所有 s 以可移植的方式显着提高性能:

BEGIN TRANSACTION
INSERT ...
INSERT ...
...
COMMIT TRANSACTION
于 2009-05-22T12:48:56.147 回答
0

如果时间对您有利,您可以考虑使用 SQL Server Service Broker 技术,但最初的学习曲线相当陡峭。

http://msdn.microsoft.com/en-us/library/ms166043(SQL.90).aspx

您可以创建一个 Web 服务,该服务会触发一个存储过程来插入您的过程结果。

于 2009-05-22T12:49:34.773 回答