【问题标题】:Updating a SQL database table with a webservice使用 Web 服务更新 SQL 数据库表
【发布时间】:2010-10-28 05:00:25
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: asp.net sql dataset bulkinsert


    【解决方案1】:

    您可以使用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属性。

    【讨论】:

    • 一个侧面注 - 这需要目标表“mytable”在SQL Server中存在 - 它不会创建它。 span>
    • 好点。它还假设表格完全映射到返回的WebService数据。如果列甚至略有不同,则需要添加自定义映射。 span>
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-12-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-07
          • 2014-03-25
          • 2018-04-22
          相关资源
          最近更新 更多