IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]RDIFramework.NET ━ .NET快速信息化系统开发框架 记录所有操作的Sql

    chinahuyong发表于 2016-08-09 10:49:23
    love 0

    在实际开发或试运行过程中,我们有时需要查看或分析模块执行的所有sql,以便进行相关分析。有时我们可以通过数据库自带的软件抓取,如:SQL Server Profiler。在我们RDIFramework.NET框架中已经提供了对Sql执行的跟踪支持,只需要把“LogSQL”配置项设置为True即可。

    WinForm配置如下图所示:

    MVC配置为:Code\RDIFramework.MvcApp\XmlConfig\下的system.config

    WebForm配置为:Code\RDIFramework.WebApp\下的Web.config

    Web同时要指定:SystemInfo.StartupPath = HttpContext.Current.Server.MapPath("~/");

    如下图所示

    登录框架后,随便点击一些模块,再查看框架运行目录下的“\Log\Query\”文件夹下以日期开始的文本文件,如下图所示:

    随便打开一个文件,就可以查看所有的sql,如下图:

    方法参考:

    	/// <summary>
            /// 写入sql查询句日志
            /// </summary>
            /// <param name="commandText"></param>
            public virtual void WriteLog(string commandText)
            {
                string fileName = DateTime.Now.ToString(SystemInfo.DateFormat) + " _ " + this.FileName;
                WriteLog(commandText, fileName);
            }
    
            /// <summary>
    		/// 写入sql查询句日志
    		/// </summary>
    		/// <param name="commandText">异常</param>
            /// <param name="fileName">文件名</param>
    		public virtual void WriteLog(string commandText, string fileName = null)
    		{
    			if (string.IsNullOrEmpty(fileName))
    			{
    				fileName = DateTime.Now.ToString(SystemInfo.DateFormat) + " _ " + this.FileName;
    			}
    			string returnValue = string.Empty;
    			// 系统里应该可以配置是否记录异常现象
    			if (!SystemInfo.LogSQL)
    			{
    				return;
    			}
    			// 将异常信息写入本地文件中
    			string logDirectory = SystemInfo.StartupPath + @"\\Log\\Query";
    			if (!System.IO.Directory.Exists(logDirectory))
    			{
    				System.IO.Directory.CreateDirectory(logDirectory);
    			}
    			string writerFileName = logDirectory + "\\" + fileName;
    			if (!File.Exists(writerFileName))
    			{
    				FileStream FileStream = new FileStream(writerFileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
    				FileStream.Close();
    			}
    			StreamWriter streamWriter = new StreamWriter(writerFileName, true, Encoding.Default);
    			streamWriter.WriteLine(DateTime.Now.ToString(SystemInfo.DateTimeFormat) + " " + commandText);
    			streamWriter.Close();
    		}
    
            public virtual void WriteLog(string commandText, IDbDataParameter[] dbParameters = null, string fileName = null)
            {
                // 系统里应该可以配置是否记录异常现象
                if (!SystemInfo.LogSQL)
                {
                    return;
                }
                if (string.IsNullOrEmpty(fileName))
                {
                    fileName = DateTime.Now.ToString(SystemInfo.DateFormat) + " _ " + FileName;
                }
                string message = string.Empty;
                message = DateTime.Now.ToString(SystemInfo.DateTimeFormat) + System.Environment.NewLine + "commandText内容" + System.Environment.NewLine + commandText;
                if (dbParameters != null)
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (var parameter in dbParameters)
                    {
                        sb.AppendLine(parameter.ParameterName + "=" + parameter.Value);
                    }
                    message += System.Environment.NewLine + "dbParameters内容" + System.Environment.NewLine + sb.ToString();
                }
                string logDirectory = SystemInfo.StartupPath + @"\Log\Query";
                if (!System.IO.Directory.Exists(logDirectory))
                {
                    System.IO.Directory.CreateDirectory(logDirectory);
                }
                string writerFileName = logDirectory + "\\" + fileName;
                if (!File.Exists(writerFileName))
                {
                    FileStream FileStream = new FileStream(writerFileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
                    FileStream.Close();
                }
                StreamWriter streamWriter = new StreamWriter(writerFileName, true, Encoding.Default);
                streamWriter.WriteLine(DateTime.Now.ToString(SystemInfo.DateTimeFormat) + " " + message);
                streamWriter.Close();
            }

     

    参考文章:

    RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系列目录

    RDIFramework.NET平台代码生成器V3.0版本全新发布-更新于20160518(提供下载)

    RDIFramework.NET ━ .NET快速信息化系统开发框架钜献 V3.0 版本强势发布

    RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍

    RDIFramework.NET框架SOA解决方案(集Windows服务、WinForm形式与IIS形式发布)-分布式应用

      视频列表:

      第1部分、框架在不同数据库中的配置

    第1.1讲、RDIFramework.NET框架在SqlServer2008+中的配置与运行讲解

    第1.2讲、RDIFramework.NET框架在Oracle11g+中的配置与运行讲解

    第1.3讲、RDIFramework.NET框架在MySql 5.0+ 中的配置与运行讲解

    第2部分、框架基于代码生成器的开发

    第2.1讲、RDIFramework.NET框架基于代码生成器业逻辑层代码的生成

    第2.2讲、RDIFramework.NET框架基于代码生成器生成MvcUI的讲解

    第2.2.1讲、RDIFramework.NET框架基于代码生成器生成MvcUI的讲解_第2.2讲补充视频

    第2.3讲、RDIFramework.NET框架基于代码生成器生成WebFormUI的讲解

    第2.4讲、RDIFramework.NET框架基于代码生成器生成的业务逻辑进行WinForm程序的开发

     

     

        一路走来数个年头,感谢RDIFramework.NET框架的支持者与使用者,大家可以通过下面的地址了解详情。

          RDIFramework.NET官方网站:http://www.rdiframework.net/

          RDIFramework.NET官方博客:http://blog.rdiframework.net/

          同时需要说明的,以后的所有技术文章以官方网站为准,欢迎大家收藏!

    RDIFramework.NET框架由专业团队长期打造、一直在更新、一直在升级,请放心使用! 

    欢迎关注RDIFramework.NET框架官方公众微信(微信号:rdiframework-net),及时了解最新动态。

    扫描二维码立即关注

    RDIFramework.NET 官方微信




沪ICP备19023445号-2号
友情链接