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 其他操作
}
}
https://www.cnblogs.com/hllxy/p/12659031.html