• C# 监控sql数据库


    记录一下,通过大佬的文章

    Sql Server数据库监听 c#代码

    做个总结。

    1.下载sqltools依赖包,将依赖包加到自己的项目中。

    2.创建相应的方法,进行自己想要监测的数据库操作。

    private void StartSqlServerProfiler()
            {
                try
                {
                    IProfiler profiler = ToolsFactory.Instance.CreateProfiler(serverName, userName, pwd, null);//连接sql相关,servername,用户名,密码
                    profiler.Initialize(TraceOptions.FileRollover, DateTime.Now.ToString(".yyyy.MM.dd.HH.mm.ss"));
                    var TraceFieldArr = new TraceField[] {
                       TraceField.TextData,
                       TraceField.StartTime,
                       TraceField.Writes,
                       TraceField.Reads,
                       TraceField.ApplicationName
                    };
                    TraceEventProperties eventPropSql = new TraceEventProperties()
                    {
                        Event = TraceEvent.SPStmtCompleted,//TraceEvent.SQLBatchCompleted,//这里是对应监控的事件,测试的时候,可以打开SQL自带 SQL Server Profiler 进行测试,然后填写相关的事件
                        Fields = TraceFieldArr
                    };
                    profiler.AddTraceEvent(eventPropSql.Event, eventPropSql.Fields);
                    var filter = new FilterProperties(
                           TraceField.ApplicationName,
                           (ComparisonOperator)Enum.Parse(typeof(ComparisonOperator), "Equal"),
                           ".Net SqlClient Data Provider");//这里是需要监控的应用名称,也可在SQL server Profiler 中测试以后,找到需要监测的应用,如://Navicat//Microsoft SQL Server Management Studio - 查询
                    if (filter.CheckFilter())
                    {
                        profiler.AddTraceFilter(filter.Field, LogicalOperator.AND, filter.Operator, filter.TypedValue);
                    }
                    profiler.TraceEvent += profiler_TraceEvent;
                    profiler.Start();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("sql监控开启失败:" + ex.Message, "Meg");                
                }
    
            }
    private void profiler_TraceEvent(object sender, TraceEventArgs e)
            {
                if (e.EventsTable.Rows.Count > 0)
                {
                    List<SqliteMode> SqliteModeList = new List<SqliteMode>();
                    foreach (DataRow row in e.EventsTable.Rows)
                    {
                        string textData = row["TextData"].ToString();
                        if (textData.IndexOf("update 表名 set 列名=") > -1)//我这里监控的是更新表
                        {
                            //update [dbo].[表名] set 列名=
                            //MessageBox.Show("变化了。", "meg");
                            logMan.Info("sql监测到变化:" + textData);
                            try
                            {
                               //todo 做一些自己的操作
                            }
                            catch (Exception ex)
                            {
                                
                            }
                        }
    
                    }
                    //todo 其他操作
                }
            }
  • 相关阅读:
    初步学习“C#中is,as用法”(转载)
    SQL 语句性能调优
    算24点,给出四个数字,算出所有组合
    企业信息化实施先松后紧
    解决Json的DateTime格式问题
    Hadoop安装记录
    Test Blog by using windows live writer
    EL表达式获取对象属性的原理
    spring配置文件中配置sessionFactory失败
    Visual Studio 使用Web Deploy 3.6发布项目
  • 原文地址:https://www.cnblogs.com/hllxy/p/12659031.html
Copyright © 2020-2023  润新知