【问题标题】:stop sql insert in a for or while loop在 for 或 while 循环中停止 sql 插入
【发布时间】:2009-10-20 11:47:16
【问题描述】:

我创建了一个最多 100 个循环来在 db 中插入任何数据。 但是当我关闭浏览器时,我希望它停止但它在后台继续循环并填充我的数据库。我怎样才能阻止它?

谢谢

【问题讨论】:

  • 你的代码是什么样的?

标签: c# asp.net sql linq


【解决方案1】:

不保证它会起作用,但您可以尝试HttpResponse.IsClientConnected 属性。

for (int i = 0; i < 100; i++)
{
    if (!Response.IsClientConnected) break;

    // insert the next row
}

【讨论】:

    【解决方案2】:

    听起来您已经从 ASP.NET 表单开始此过程,服务器端代码执行循环以响应某些事情(加载 ASP.NET 表单或单击按钮等)。

    请注意,关闭浏览器窗口不会停止您在“服务器”上调用的任何长时间运行的代码进程。虽然这可能在同一台机器上运行,但这里的“服务器”是IIS/Cassini 进程,它将您的网页提供给“客户端”(您的浏览器)。

    为了停止这种情况,您需要停止/关闭 IIS 或 Cassini(Visual Studio 在本地开发计算机上运行 Web 应用程序时使用的 Cassini 小型 Web 服务器),或停止/关闭 SQL Server 进程.

    编辑:除了提到停止 IIS/SQL 之外,我注意到其他答案的反对意见。当然,这是一种“最后的”机制,用于停止由“客户端”调用但在“服务器”上运行的长时间运行的进程。如果这是在“真实”应用程序中完成,并且您希望允许用户取消长时间运行的应用程序,则需要 Marc 建议的方法(即使用 AJAX,“轮询”网页AJAX“刷新”并响应后续用户输入(即按钮点击)。

    【讨论】:

      【解决方案3】:

      如果您在服务器上通过单个 http 请求执行此操作(例如,响应代码隐藏中的按钮事件),那么服务器并不真正关心浏览器。如果您希望在浏览器停止时停止插入,我建议您可能通过 ajax 循环来执行此操作 - 但请注意,这会慢得多,因为您将在服务器上有 100 次往返和 100 组单独的处理.

      【讨论】:

        【解决方案4】:

        创可贴解决方案怎么样:

        让您的网页每 5 秒左右向服务器发送一次 keep-alive AJAX 调用,如果未收到 keep-alive 则中止:)

        【讨论】:

          【解决方案5】:

          关闭 SQL Server 和/或 IIS。

          编辑: ...假设您犯了一个编程错误,您的数据库一直在填满,而您非常想阻止它——这就是我理解您的问题的方式。

          【讨论】:

          • 希望它与 iis stop 一起使用,因为 sql server 是远程的。谢谢
          • 我喜欢测试一个大程序..但我想随时停止它。
          • 好的,在这种情况下,最优雅的解决方案可能是将 INSERT 代码放入后台线程并在您的 aspx 页面上创建一个停止按钮来停止该线程。
          • 顺便说一句:如果有人可以解释或“修复”否决票,我将不胜感激......
          猜你喜欢
          • 1970-01-01
          • 2018-10-14
          • 2020-05-17
          • 2022-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多