首页 > 数据库 >SqlSugar-C#版(二)_SqlSugar单例

SqlSugar-C#版(二)_SqlSugar单例

时间:2023-05-10 18:24:49浏览次数:44  
标签:Console C# db AppendLine 单例 sql 执行 SqlSugar sqlStr

/**
*┌──────────────────────────────────────────────────────────────┐
*│ 描    述:SqlSugar数据库连接类-单例                                                 
*│ 作    者:执笔小白                                              
*│ 版    本:1.0                                       
*│ 创建时间:2022-12-2 15:40:56                            
*└──────────────────────────────────────────────────────────────┘
*┌──────────────────────────────────────────────────────────────┐
*│ 命名空间: Common._Base                               
*│ 类    名:SqlSugarHelper                                     
*└──────────────────────────────────────────────────────────────┘
*/
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SCADA_Modbus.Common
{
    /// <summary>
    /// SqlSugarHelper-单例
    /// ① 再外面验证是否是单例:SqlSugarHelper.Db.HasCode();  // 只要看这个hascode在服务启动后都一个那么说明成功了
    /// ② 使用示例:继承、调用静态方法
    /// </summary>
    public class SqlSugarHelper  // 注:不要改成泛型类
    {
        /// <summary>
        /// 单例-SqlSugarScope(官方推荐使用这种单例)
        /// </summary>
        public static SqlSugarScope Db = new SqlSugarScope(new ConnectionConfig()  // 静态单例模式;如果是泛型类 Db要扔到外面 ,DbContext<T>.Db会导致产生多个实例。
        {
            ConnectionString = "Server=.xxxxx",//连接符字串
            DbType = DbType.SqlServer,  //数据库类型
            IsAutoCloseConnection = true //不设成true要手动close
        },
          db =>
          {
              db.Ado.CommandTimeOut = 720;  // 12分钟
              // UtilMethods.GetSqlString(DbType.SqlServer,sql,pars)
              // 每次Sql执行前事件,记录进行的操作
              db.Aop.OnLogExecuting = (sql, pars) =>
              {
                  StringBuilder sqlStr = new StringBuilder();

                  if (sql.StartsWith("UPDATE") || sql.StartsWith("INSERT"))
                  {
                      Console.ForegroundColor = ConsoleColor.Blue;
                      sqlStr.AppendLine($"==============将要执行新增/修改操作==============");
                  }
                  if (sql.StartsWith("DELETE"))
                  {
                      Console.ForegroundColor = ConsoleColor.Red;
                      sqlStr.AppendLine($"==============将要执行删除操作==============");
                  }
                  if (sql.StartsWith("SELECT"))
                  {
                      Console.ForegroundColor = ConsoleColor.Green;
                      sqlStr.AppendLine($"==============将要执行查询操作==============");
                  }
                  sqlStr.AppendLine("【SQL预执行语句】:");
                  sqlStr.AppendLine("    " + sql);
                  sqlStr.AppendLine("【参数】:");
                  string sqlPars = db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value));
                  sqlStr.AppendLine("    " + sqlPars);

                  Console.WriteLine(sqlStr.ToString());  // 打印
                  Console.ForegroundColor = ConsoleColor.White;

                  // 记录执行的信息
                  //_logger.LogCritical("\r\n 【开始打印仓储日志】:\r\n 【执行时间】:{0} \r\n 【SQL预执行语句】:{1} \r\n 【参数】:{2}", DateTime.Now.ToString(), sql, sqlPars);
              };

              // 每次Sql执行后事件,记录SQL执行完的信息
              db.Aop.OnLogExecuted = (sql, pars) =>
              {
                  // 执行时间超过1秒
                  if (db.Ado.SqlExecutionTime.TotalSeconds > 1)
                  {
                      StringBuilder sqlPStr = new StringBuilder();
                      sqlPStr.AppendLine($"==============执行了下面的操作==============");
                      var fileName = db.Ado.SqlStackTrace.FirstFileName;           // 代码CS文件名
                      sqlPStr.AppendLine("【代码CS文件名】:" + fileName);
                      var fileLine = db.Ado.SqlStackTrace.FirstLine;               // 代码行数
                      sqlPStr.AppendLine("【代码行数】:" + fileLine);
                      var FirstMethodName = db.Ado.SqlStackTrace.FirstMethodName;  // 方法名
                      sqlPStr.AppendLine("【方法名】:" + FirstMethodName);
                      sqlPStr.AppendLine("【SQL执行语句】:");
                      sqlPStr.AppendLine("    " + sql);
                      sqlPStr.AppendLine("【参数】:");
                      string sqlPars = db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value));
                      sqlPStr.AppendLine("    " + sqlPars);

                      // 打印
                      Console.ForegroundColor = ConsoleColor.Green;
                      Console.WriteLine(sqlPStr);
                      Console.ForegroundColor = ConsoleColor.White;

                      // 记录执行的信息
                      //_logger.LogCritical("\r\n 【结束打印仓储日志】:\r\n 【执行时间】:{0} \r\n 【SQL执行时间】:{1} \r\n 【代码CS文件名】:{2} \r\n 【代码行数】:{3} \r\n 【方法名】:{4} \r\n 【SQL执行语句】:{5} \r\n 【参数】:{6}",
                      //    DateTime.Now.ToString(), base.Context.Ado.SqlExecutionTime.ToString(), fileName, fileLine, FirstMethodName, sql, sqlPars);
                  }
              };

              // 记录SQL报错
              db.Aop.OnError = (exp) =>
              {
                  StringBuilder sqlStr = new StringBuilder();
                  sqlStr.AppendLine($"==============数据库执行报错==============");
                  sqlStr.AppendLine("【SQL执行语句】:");
                  sqlStr.AppendLine("    " + exp.Sql);
                  sqlStr.AppendLine("【参数】:");
                  string sqlPars = JsonConvert.SerializeObject(exp.Parametres);
                  sqlStr.AppendLine("    " + sqlPars);
                  sqlStr.AppendLine("【报错信息】:");
                  sqlStr.AppendLine("    " + exp.Message);
                  sqlStr.AppendLine("【报错位置】:");
                  string expStackTrace = exp.StackTrace.Substring(exp.StackTrace.LastIndexOf("\\") + 1, exp.StackTrace.Length - exp.StackTrace.LastIndexOf("\\") - 1);
                  sqlStr.AppendLine("    " + expStackTrace);
                  Console.ForegroundColor = ConsoleColor.Red;
                  Console.WriteLine(sqlStr);  // 打印
                  Console.ForegroundColor = ConsoleColor.White;

                  // 记录执行的信息
                  //_logger.LogCritical("\r\n 【打印仓储sql报错日志】:\r\n 【执行时间】:{0} \r\n 【SQL执行语句】:{1} \r\n 【参数】:{2} \r\n 【报错信息】:{3} \r\n 【报错位置】:{4}", DateTime.Now.ToString(), exp.Sql, sqlPars, exp.Message, expStackTrace);
              };
          });

        /// <summary>
        /// 单例-SqlSugarClient
        /// </summary>
        public static SqlSugarClient Db2 = new SqlSugarClient(new ConnectionConfig()  // 静态单例模式;如果是泛型类 Db要扔到外面 ,DbContext<T>.Db会导致产生多个实例。
        {
            ConnectionString = "Server=.xxxxx",//连接符字串
            DbType = DbType.SqlServer,  //数据库类型
            IsAutoCloseConnection = true //不设成true要手动close
        },
          db =>
          {
              db.Ado.CommandTimeOut = 720;  // 12分钟
              // UtilMethods.GetSqlString(DbType.SqlServer,sql,pars)
              // 每次Sql执行前事件,记录进行的操作
              db.Aop.OnLogExecuting = (sql, pars) =>
              {
                  StringBuilder sqlStr = new StringBuilder();

                  if (sql.StartsWith("UPDATE") || sql.StartsWith("INSERT"))
                  {
                      Console.ForegroundColor = ConsoleColor.Blue;
                      sqlStr.AppendLine($"==============将要执行新增/修改操作==============");
                  }
                  if (sql.StartsWith("DELETE"))
                  {
                      Console.ForegroundColor = ConsoleColor.Red;
                      sqlStr.AppendLine($"==============将要执行删除操作==============");
                  }
                  if (sql.StartsWith("SELECT"))
                  {
                      Console.ForegroundColor = ConsoleColor.Green;
                      sqlStr.AppendLine($"==============将要执行查询操作==============");
                  }
                  sqlStr.AppendLine("【SQL预执行语句】:");
                  sqlStr.AppendLine("    " + sql);
                  sqlStr.AppendLine("【参数】:");
                  string sqlPars = db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value));
                  sqlStr.AppendLine("    " + sqlPars);

                  Console.WriteLine(sqlStr.ToString());  // 打印
                  Console.ForegroundColor = ConsoleColor.White;

                  // 记录执行的信息
                  //_logger.LogCritical("\r\n 【开始打印仓储日志】:\r\n 【执行时间】:{0} \r\n 【SQL预执行语句】:{1} \r\n 【参数】:{2}", DateTime.Now.ToString(), sql, sqlPars);
              };

              // 每次Sql执行后事件,记录SQL执行完的信息
              db.Aop.OnLogExecuted = (sql, pars) =>
              {
                  // 执行时间超过1秒
                  if (db.Ado.SqlExecutionTime.TotalSeconds > 1)
                  {
                      StringBuilder sqlPStr = new StringBuilder();
                      sqlPStr.AppendLine($"==============执行了下面的操作==============");
                      var fileName = db.Ado.SqlStackTrace.FirstFileName;           // 代码CS文件名
                      sqlPStr.AppendLine("【代码CS文件名】:" + fileName);
                      var fileLine = db.Ado.SqlStackTrace.FirstLine;               // 代码行数
                      sqlPStr.AppendLine("【代码行数】:" + fileLine);
                      var FirstMethodName = db.Ado.SqlStackTrace.FirstMethodName;  // 方法名
                      sqlPStr.AppendLine("【方法名】:" + FirstMethodName);
                      sqlPStr.AppendLine("【SQL执行语句】:");
                      sqlPStr.AppendLine("    " + sql);
                      sqlPStr.AppendLine("【参数】:");
                      string sqlPars = db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value));
                      sqlPStr.AppendLine("    " + sqlPars);

                      // 打印
                      Console.ForegroundColor = ConsoleColor.Green;
                      Console.WriteLine(sqlPStr);
                      Console.ForegroundColor = ConsoleColor.White;

                      // 记录执行的信息
                      //_logger.LogCritical("\r\n 【结束打印仓储日志】:\r\n 【执行时间】:{0} \r\n 【SQL执行时间】:{1} \r\n 【代码CS文件名】:{2} \r\n 【代码行数】:{3} \r\n 【方法名】:{4} \r\n 【SQL执行语句】:{5} \r\n 【参数】:{6}",
                      //    DateTime.Now.ToString(), base.Context.Ado.SqlExecutionTime.ToString(), fileName, fileLine, FirstMethodName, sql, sqlPars);
                  }
              };

              // 记录SQL报错
              db.Aop.OnError = (exp) =>
              {
                  StringBuilder sqlStr = new StringBuilder();
                  sqlStr.AppendLine($"==============数据库执行报错==============");
                  sqlStr.AppendLine("【SQL执行语句】:");
                  sqlStr.AppendLine("    " + exp.Sql);
                  sqlStr.AppendLine("【参数】:");
                  string sqlPars = JsonConvert.SerializeObject(exp.Parametres);
                  sqlStr.AppendLine("    " + sqlPars);
                  sqlStr.AppendLine("【报错信息】:");
                  sqlStr.AppendLine("    " + exp.Message);
                  sqlStr.AppendLine("【报错位置】:");
                  string expStackTrace = exp.StackTrace.Substring(exp.StackTrace.LastIndexOf("\\") + 1, exp.StackTrace.Length - exp.StackTrace.LastIndexOf("\\") - 1);
                  sqlStr.AppendLine("    " + expStackTrace);
                  Console.ForegroundColor = ConsoleColor.Red;
                  Console.WriteLine(sqlStr);  // 打印
                  Console.ForegroundColor = ConsoleColor.White;

                  // 记录执行的信息
                  //_logger.LogCritical("\r\n 【打印仓储sql报错日志】:\r\n 【执行时间】:{0} \r\n 【SQL执行语句】:{1} \r\n 【参数】:{2} \r\n 【报错信息】:{3} \r\n 【报错位置】:{4}", DateTime.Now.ToString(), exp.Sql, sqlPars, exp.Message, expStackTrace);
              };
          });
    }
}

标签:Console,C#,db,AppendLine,单例,sql,执行,SqlSugar,sqlStr
From: https://www.cnblogs.com/qq2806933146xiaobai/p/17388869.html

相关文章

  • LeetCode 459. 重复的子字符串
    题目链接:LeetCode459.重复的子字符串题意:给定一个非空的字符串s,检查是否可以通过由它的一个子串重复多次构成。解题思路:本题就是kmp算法的经典应用,n-next[n]是原字符串的最小周期完整代码如下:funcrepeatedSubstringPattern(sstring)bool{//kmp的经典应用:求......
  • FICO到期日期获取
    GettheBaselinedateBasedontheNewPaymentTerms.*CalculateDueDatebasedontheBaselineDate.callfunction'FI_CHANGE_PAYMENT_CONDITIONS'"#EC*exportingi_bldat=bldati_budat=budati_newzterm......
  • app逆向之安卓native层安全逆向分析(七):unidbg自尝试某潮流app+dvmObject[]处理
    前言跟着龙哥搞了几次unidbg了,这次也自己尝试用来分析下某潮流app了。分析1.抓包先抓个包 我们要搞的就是这个sign-v1了。  2.调试找参数jadx一顿分析,一搜: 搜出来还不少,往下翻,找找一些特征,很快找到这里 点进去    ok,用objectionhook之后,发现不是......
  • JdbcTemplate 开启事务
    JdbcTemplatejdbcTemplate=newJdbcTemplate();//获取DataSourceDataSourcedataSource=jdbcTemplate.getDataSource();//获取ConnectionConnectionconnection=DataSourceUtils.getConnection(dataSource);//关闭jdbc自动提交connection.setAutoCommit(false);try{/......
  • JFreeChart构建柱状图
    JFreeChart构建柱状图前言Java开发中,可以采用许多库和框架来实现图表统计功能。以下是一些常见的Java图表统计库和框架:JFreeChart:JFreeChart是一个流行的Java图表库,可用于生成各种类型的图表,包括线图、柱状图、饼图等。Chart.js:Chart.js是一个基于HTML5Canvas的JavaScript图......
  • 获取采购信息记录函数BAPI_INFORECORD_GETLIST
    DATA:lt_purchTYPETABLEOFbapieine,lt_returnTYPETABLEOFbapireturn.FIELD-SYMBOLS:<fs_return>TYPEbapireturn,<fs_purch>TYPEbapieine.CALLFUNCTION'BAPI_INFORECORD_GETLIST'EXPORTING......
  • Docker 国内镜像加速
    1.摘要国内从DockerHub拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker官方和国内很多云服务商都提供了国内加速器服务,建议根据运行docker的云平台选择对应的镜像加速服务。下面列出国内常用的加速站点,排名不分先后,总体来说阿里云速度较稳定。docker中国区官方镜像加......
  • AI别来搅局,chatGPT的世界不懂低代码
    ChatGPT单月访问量再创新高根据SimilarWeb统计,ChatGPT上月全球访问量17.6亿次,已超越必应、鸭鸭走DuckDuckGo等其他国际搜索引擎,并达到谷歌的2%,百度的60%。 这会,程序员失业的段子又得再来一遍了:拖拽建站出来的时候,他们人说程序员会失业;低代码出来了,他们说程序员会失业;Copilo......
  • docker修改镜像源
    docker修改镜像源我们在Linux系统上装docker后,下载我们所需要的镜像去创建容器时,由于docker的默认是从国外的仓库里边去下载我们所需要的镜像的,从而会导致dockerpull下拉速度比较慢将docker镜像源修改为国内的编辑配置文件在/etc/docker/daemon.json文件中添加以下参数,......
  • C++
    学生类的析构与构造#include<iostream>#include<string.h>usingnamespacestd;classStudent{public:Student(int_num,string_name,char_sex){num=_num;name=_name;sex=_sex;cout<<"Constructorcalled."......