C# 监控sql数据库
记录一下,通过大佬的文章
做个总结。
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 其他操作 } }