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

最近在使用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,用来显示日志:

<% @ Page Language = " C# "  AutoEventWireup = " true "  CodeBehind = " Log.aspx.cs "  Inherits = " Clowwindy.Log "   %>

<! DOCTYPE html PUBLIC  " -//W3C//DTD XHTML 1.0 Transitional//EN "   " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >

< html xmlns = " http://www.w3.org/1999/xhtml "   >
< head runat = " server " >
    
< title > SQL Log </ title >
</ head >
< body >
    
< form id = " form1 "  runat = " server " >
    
< asp:Button ID = " btn_Clean "  runat = " server "  Text = " 清空 "  
        onclick
= " btn_Clean_Click " />
    
< div >
        
< asp:Literal ID = " Literal1 "  runat = " server " ></ asp:Literal >
    
</ div >
    
</ form >
</ body >
</ html >

 

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<br/> " );
        }

        
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语句。

posted on 2009-05-12 17:42 clowwindy 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/clowwindy/archive/2009/05/12/1455116.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值