ASP.NET中显示Linq To SQL输出的SQL语句

.NET技术    2009-05-28 08:55  

  最近在使用Linq To SQL的时候,为了了解不同Linq语句对性能造成的不同影响,需要获得Linq To SQL生成的SQL语句。

  如果是在桌面程序中,只需要

  _context.Log = Console.Out;

  即可在控制台输出SQL语句。可是在ASP.NET中又该怎么办呢?

  这时我想起了StringWriter。用它就可以代替Console.Out帮我们接收输出的日志,保存在一个StringBuilder里。

  于是构造一个辅助类:

  using System;

  using System.Collections.Generic;

  using System.Linq;

  using System.Web;

  using System.IO;

  using System.Text;

  
namespace Clowwindy.Models

  {

  public static class LogHelper

  {

  public static StringBuilder Log = new StringBuilder();

  public static TextWriter In = new StringWriter(Log);

  public static string GetAllLog()

  {

  In.Flush();

  return Log.ToString();

  }

  public static void Clean()

  {

  Log = new StringBuilder();

  In = new StringWriter(Log);

  }

  }

  }

  
再添加一个页面log.aspx,用来显示日志:

  onclick="btn_Clean_Click"/>

  using System;

  using System.Collections.Generic;

  using System.Linq;

  using System.Web;

  using System.Web.UI;

  using System.Web.UI.WebControls;

  using Clowwindy.Models;

  
namespace Clowwindy

  {

  public partial class Log : System.Web.UI.Page

  {

  protected void Page_Load(object sender, EventArgs e)

  {

  if (Request.UserHostAddress != "127.0.0.1")

  {

  Response.End();

  return;

  }

  Literal1.Text = LogHelper.GetAllLog().Replace("\n","\n
");

  }

  
protected void btn_Clean_Click(object sender, EventArgs e)

  {

  LogHelper.Clean();

  Literal1.Text = null;

  }

  }

  }

  
最后在所有new DataContext的地方

  加上_context.Log = LogHelper.In:

   

  public Repository()

  {

  _context = new TDataContext();

  _context.Log = LogHelper.In;

  }

  打开log.aspx,即可看到之前执行的SQL语句。

在线留言

我要留言