最近在使用Linq To SQL的时候
为了了解不同Linq语句对性能造成的不同影响
需要获得Linq To SQL生成的SQL语句
如果是在桌面程序中只需要
_contextLog = ConsoleOut;
即可在控制台输出SQL语句可是在ASPNET中又该怎么办呢?
这时我想起了StringWriter用它就可以代替ConsoleOut帮我们接收输出的日志保存在一个StringBuilder里
于是构造一个辅助类
using System;
using SystemCollectionsGeneric;
using SystemLinq;
using SystemWeb;
using SystemIO;
using SystemText;
namespace ClowwindyModels
{
public static class LogHelper
{
public static StringBuilder Log = new StringBuilder();
public static TextWriter In = new StringWriter(Log);
public static string GetAllLog()
{
InFlush();
return LogToString();
}
public static void Clean()
{
Log = new StringBuilder();
In = new StringWriter(Log);
}
}
}
再添加一个页面logaspx用来显示日志
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Log.aspx.cs" Inherits="Clowwindy.Log" %>
using System;
using SystemCollectionsGeneric;
using SystemLinq;
using SystemWeb;
using SystemWebUI;
using SystemWebUIWebControls;
using ClowwindyModels;
namespace Clowwindy
{
public partial class Log : SystemWebUIPage
{
protected void Page_Load(object sender EventArgs e)
{
if (RequestUserHostAddress != )
{
ResponseEnd();
return;
}
LiteralText = LogHelperGetAllLog()Replace(\n\n
);
}
protected void btn_Clean_Click(object sender EventArgs e)
{
LogHelperClean();
LiteralText = null;
}
}
}
最后在所有new DataContext的地方
加上_contextLog = LogHelperIn:
public Repository()
{
_context = new TDataContext();
_contextLog = LogHelperIn;
}
打开logaspx即可看到之前执行的SQL语句