C#, как получить список сеансов XEvent в данной базе данных

Я пытаюсь написать простой код управления расширенными событиями на C#, но я довольно новичок в этом. Я могу настроить сеансы XEvent в SSMS и смог получить поток Linq из этого созданного сеанса в C#, используя этот пример

Что я хотел бы сделать сейчас, так это уметь запрашивать у заданной базы данных, какие сеансы существуют. Я мог бы вручную запросить sys.dm_xe* таблиц и создайте сопоставленные классы для них, но похоже, что классы уже существуют в пространстве имен Microsoft.SqlServer.Management.XEvent - поэтому я не хотел бы делать плохую повторную реализацию, если что-то уже существует.

Конкретная таблица, содержащая, какие сеансы существуют, sys.dm_xe_sessions,

Любой пример кода или помощь приветствуется. Спасибо!

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();
}
Другие вопросы по тегам