記錄一下,通過大佬的文章
做個總結。
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 其他操作 } }
