Профилирование SQL на уровне приложения C#

Некоторый контекст:

У меня есть проект с подключениями MSSQL и Oracle с использованием следующих классов:

Oracle.ManagedDataAccess.Client.OracleConnection; // from nuget: Oracle.ManagedDataAccess
System.Data.SqlClient.SqlConnection; // from .net framework System.Data.dll

В sql server существует инструмент под названием profile. Я недостаточно разбираюсь в Oracle, чтобы знать аналогичный инструмент, но я думаю, что он есть.

По многим причинам (команда db не разрешена, низкая производительность и т. д.) Я не могу включить SQL Server Profiler.

Попробуйте 1:

Итак, я ищу что-то на C#, что позволяет мне получать поток SQL, передаваемый IDbConnection (и IDbCommand или другими).

До сих пор мне не везло.

Попробуйте 2:

Я даже пытаюсь создать себе класс-оболочку, чтобы задействовать IDbConnection и его помощники (например, IDbCommand):

public class ProfiledConnection : IDbConnection
{
    private readonly IDbConnection _con;

    public ProfiledConnection(IDbConnection originalConnection)
    {
        _con = originalConnection;
    }

    public void Dispose() => _con.Dispose();

    public IDbTransaction BeginTransaction() 
    {
        // some code to log what's going on
        return _con.BeginTransaction();
    }

    public IDbCommand CreateCommand()
    {
        // some code to log what's going on
        return new ProfiledCommand(_con.CreateCommand());
    }

    // all IDbConnection members implemented with the same approach...
}

public class ProfiledCommand : IDbCommand
{
    private readonly IDbCommand _cmd;

    public ProfiledCommand(IDbCommand originalCommand)
    {
        // some code to log what's going on
        _cmd = originalCommand;
    }

    public void Dispose() => _cmd.Dispose();

    public void Prepare()
    {
        // some code to log what's going on
        _cmd.Prepare();
    }

    // all IDbCommand members implemented with the same approach...
}

Но и это у меня не получилось. У меня есть модульные тесты моего приложения, и когда я изменил фабрику соединений, чтобы вернуть что-то вроде:

new ProfiledConnection(new OracleConnection("myconnectionstring"));

Многие тесты терпели неудачу, со всеми типами ошибок, это меня так расстраивало, что я был уверен, что иду в правильном направлении.

Запрос:

Теперь я потерялся, может ли кто-нибудь предложить какой-либо компонент, пакет или подход для выполнения «Профиль SQL внутри приложения».

Какую информацию вы пытаетесь собрать и почему? Есть ли у вас администраторы баз данных, которые могут запустить за вас сеанс профилировщика?

MJH 04.04.2018 18:15

То, что у вас есть, очень похоже на то, что делает минипрофайл - через ProfiledDbConnection; может просто попробовать установить из Nuget? но: не зная, какие ошибки вы видите, трудно прокомментировать, сработает ли это для вас; очевидно, что ProfiledDbConnection довольно активно использовался, так что есть хороший шанс, что он сработает.

Marc Gravell 04.04.2018 18:25

Я пытаюсь увидеть все запросы (DDL, DML), созданные из ORM.

Jonny Piazzi 04.04.2018 18:52

Какой ORM вы используете конкретно? Например, если это Entity Framework 6+, это решение, похоже, может выполнить то, что вы ищете: stackoverflow.com/a/20751723/1549649

jozolo 21.09.2018 17:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
244
0

Другие вопросы по теме