使用Web服务更新SQL数据库表

时间:2009-05-22 12:19:24

标签: asp.net sql dataset bulkinsert

我有一个问题,我在互联网上看了很长时间并且很难找到答案但却无法找到任何答案。

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

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

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

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

4 个答案:

答案 0 :(得分: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属性。

答案 1 :(得分:0)

这听起来像是一个忙着忙碌的小型网络服务。

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

答案 2 :(得分:0)

由于各种原因,使用批量加载可能会很痛苦,从特定于特定DBMS的方式开始。 (通常可以获得的下一件事是需要找到包含数据的文件。)

但是,只需在单个事务中执行所有INSERT,您就可以通过便携方式显着提高性能:

BEGIN TRANSACTION
INSERT ...
INSERT ...
...
COMMIT TRANSACTION

答案 3 :(得分:0)

如果时间到了,您可以考虑使用SQL Server Service Broker技术,但最初的学习曲线非常陡峭。

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

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