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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM