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 其他操作
            }
        }

 

posted on 2020-04-08 12:01  可乐冒泡泡丶  阅读(1773)  评论(4编辑  收藏  举报