在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);
}
答案 0 :(得分:3)
如果将.ToString()放到var查询变量中,则会得到sql。你可以在Debug en VS2008中使用它。 Debug Visualizer
例如:
var query = from p in db.Table
select p;
MessageBox.SHow(query.ToString());
答案 1 :(得分:3)
System.IO.StreamWriter httpResponseStreamWriter =
new StreamWriter(HttpContext.Current.Response.OutputStream);
dataContext.Log = httpResponseStreamWriter;
将其粘贴在您的页面中,您将在页面上删除SQL。显然,我会用一个你可以启用/禁用的方法来包装它。
答案 2 :(得分:1)
答案 3 :(得分:0)
来自Linq in Action
Microsoft有一个Query Visualizer工具,可以从VS 2008中逐步下载。它位于http://weblogs.asp.net/scottgu/archive/2007/07/31/linq-to-sql-debug-visualizer.aspx