2016-04-29 74 views
5

我正在逐步调试某些网站数据库代码中的调试器,并在应用数据库更改之前结束执行。但他们仍然写入数据库!USING块在网站和窗体中的行为有所不同

我尝试使用Windows窗体应用程序重新创建问题,但未写入数据库(预期行为)。我回到网站,它确实

这是一个简单的示例页面。我在网络网站运行此,如果它的确与众不同:

<%@ Page Language="C#" %> 
<%@ Import Namespace="System.Diagnostics" %> 

<!DOCTYPE html> 

<script runat="server"> 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     using (MsSqlDataContextDataContext db = new MsSqlDataContextDataContext()) 
     { 
      Product product = db.Products.First(p => p.id == 21); 
      Debug.WriteLine("Line 1"); 
      // I learnt the hard way that if you try to update the database with the value 
      // that already exists, it seems to get optimised away. 
      // The update must a new value. 
      product.Type = "bogus" + DateTime.UtcNow.Ticks; 
      Debug.WriteLine("Line 2"); // <- Breakpoint here 
      db.SubmitChanges(); 
     } 
    } 
</script> 

<html> 
<head runat="server"> 
</head> 
</html> 

我最终执行在断点处( + F5),第二调试打印或SubmitChanges()之前得到执行。 “第2行”是而不是输出到调试窗口,但数据库更改都是作出的。

在Windows窗体中运行相同的测试的行为相同。

页面生命周期或会话管理在某种程度上干扰了吗?这怎么可能,第二行没有打印!

+0

您是否在Windows窗体上收到错误/异常,它不起作用? – raidensan

+0

@raidensan我会重写它。它行为不一样。它不会将更改写入数据库(因为我在'Submit'调用之前中止了这个操作,所以我预料它不应该这样做)。 – Ian

+0

在你的例子中做“抛出新的Exception()”而不是“Debug.WriteLine(”Line 2“)”,看看它是如何发生的。 – Evk

回答

6

当您在winform应用程序中停止调试时,进程正在终止,您的代码将停止执​​行。

在asp.net中,情况并非如此。当您停止调试器(通常)时,它不会终止iis进程,只需分离调试器即可。您的代码将继续运行,并且请求完成。

有重复的这个问题,没有代表标记为重复。

+0

好的解释,我做了搜索,但不知道原因导致困难。我会看看我是否可以找到一个愚蠢的,并自己标记:)或者联系我一个笨蛋,我会标记它。 – Ian

+0

不完全重复:[链接](http://stackoverflow.com/questions/1338785/the-asp-net-code-still-executes-after-clicking-stopping-debugging-in-vs2008)(解释你需要终止该过程) – apr

相关问题