我有一个问题,我在互联网上寻找了很久很久的答案,但找不到任何东西。
我有一个吸纳网络服务的小应用程序。然后,它通过自己的 Web 服务将此 Web 服务结果传递给另一个应用程序,并将请求存储在一个表中。
我想要做的是快速将结果从数据集中导入到表中。
选项 1 是我遍历数据集中的所有行并在每个行上使用插入。这样做的问题是它很慢,并且会减慢小应用程序 Web 服务的响应速度。
选项2是将数据集批量上传到sql中。对我来说坏消息是我不知道该怎么做!!任何人都可以帮忙吗?
我有一个问题,我在互联网上寻找了很久很久的答案,但找不到任何东西。
我有一个吸纳网络服务的小应用程序。然后,它通过自己的 Web 服务将此 Web 服务结果传递给另一个应用程序,并将请求存储在一个表中。
我想要做的是快速将结果从数据集中导入到表中。
选项 1 是我遍历数据集中的所有行并在每个行上使用插入。这样做的问题是它很慢,并且会减慢小应用程序 Web 服务的响应速度。
选项2是将数据集批量上传到sql中。对我来说坏消息是我不知道该怎么做!!任何人都可以帮忙吗?
您可以使用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属性。
这听起来像是一个非常忙碌的小型 Web 服务。
您可以改为(甚至另外)考虑将其设为异步或多线程。否则,您刚刚建立了两个 Web 应用程序之间的耦合,您可能首先将它们拆分以避免。
由于各种原因,使用批量加载可能会很痛苦,首先是您如何执行它是特定于特定 DBMS 的。(通常让您知道的下一件事是需要放置包含数据的文件的位置。)
INSERT
但是,您通常可以通过在单个事务中完成所有 s 以可移植的方式显着提高性能:
BEGIN TRANSACTION
INSERT ...
INSERT ...
...
COMMIT TRANSACTION
如果时间对您有利,您可以考虑使用 SQL Server Service Broker 技术,但最初的学习曲线相当陡峭。
http://msdn.microsoft.com/en-us/library/ms166043(SQL.90).aspx
您可以创建一个 Web 服务,该服务会触发一个存储过程来插入您的过程结果。