在
herding code播客14中,有人提到stackoverflow显示在页面底部的请求期间执行的查询.
这听起来对我来说是个好主意.每次页面加载时我都想知道执行什么sql语句,以及DB往返总数的计数.
有没有人有这个问题的巧妙解决方案?
您认为可接受的查询数量是多少?我在想,在开发过程中,如果需要超过30个查询来呈现页面,我可能会让我的应用程序抛出异常.
编辑:我想我一定不能清楚地解释我的问题.在HTTP请求期间,Web应用程序可能会执行十几个或更多sql语句.我希望将这些语句附加到页面底部,以及语句数量的计数.
这是我的解决方案:
我创建了一个DataContext可以写入的TextWriter类:
public class Logger : StreamWriter { public string Buffer { get; private set; } public int QueryCounter { get; private set; } public Logger() : base(new MemoryStream()) {} public override void Write(string value) { Buffer += value + "<br/><br/>"; if (!value.StartsWith("--")) QueryCounter++; } public override void WriteLine(string value) { Buffer += value + "<br/><br/>"; if (!value.StartsWith("--")) QueryCounter++; } }
在DataContext的构造函数中,我设置了记录器:
public HeraldDBDataContext() : base(ConfigurationManager.ConnectionStrings["Herald"].ConnectionString,mappingSource) { Log = new Logger(); }
最后,我使用Application_OnEndRequest事件将结果添加到页面底部:
protected void Application_OnEndRequest(Object sender,EventArgs e) { Logger logger = DataContextFactory.Context.Log as Logger; Response.Write("Query count : " + logger.QueryCounter); Response.Write("<br/><br/>"); Response.Write(logger.Buffer); }
解决方法
如果将.ToString()放到var查询变量中,则会得到sql.你可以在Debug en VS2008中使用它.
Debug Visualizer
例如:
var query = from p in db.Table select p; MessageBox.SHow(query.ToString());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。