C#如何获取给定数据库中的XEvent会话列表

时间:2016-12-15 17:57:02

标签: c# .net sql-server linq-to-sql extended-events

我正在尝试用C#编写一些简单的扩展事件管理代码,但对它来说还是比较新的。我能够在SSMS中设置XEvent会话,并能够使用this example

从C#中创建的会话中获取Linq流

我现在想做的是能够在给定数据库中查询存在的会话。我可以手动查询sys.dm_xe*表并为这些表创建映射类,但看起来这些类已经存在于Microsoft.SqlServer.Management.XEvent命名空间中 - 所以我讨厌做一个糟糕的重新实现,如果有的话已经存在。

保存会话的特定表格为sys.dm_xe_sessions

感谢任何示例代码或帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

要查找的课程为XEStore Microsoft.SqlServer.Managment.XEvent。通过此,您可以查看存在的扩展事件会话以及创建新会话。

using (SqlConnection conn = new SqlConnection(connString)) {
    XEStore store = new XEStore(new SqlStoreConnection(conn));

    if (store.Sessions[sessionName] != null) {
        Console.WriteLine("dropping existing session");
        store.Sessions[sessionName].Drop();
    }

    Session s = store.CreateSession(sessionName);
    s.MaxMemory = 4096;
    s.MaxDispatchLatency = 30;
    s.EventRetentionMode = Session.EventRetentionModeEnum.AllowMultipleEventLoss;

    Event rpc = s.AddEvent("rpc_completed");
    rpc.AddAction("username");
    rpc.AddAction("database_name");
    rpc.AddAction("sql_text");
    rpc.PredicateExpression = @"sqlserver.username NOT LIKE '%testuser'";

    s.Create();
    s.Start();

    //s.Stop();
    //s.Drop();
}