Некоторый контекст:
У меня есть проект с подключениями 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 внутри приложения».
То, что у вас есть, очень похоже на то, что делает минипрофайл - через ProfiledDbConnection; может просто попробовать установить из Nuget? но: не зная, какие ошибки вы видите, трудно прокомментировать, сработает ли это для вас; очевидно, что ProfiledDbConnection довольно активно использовался, так что есть хороший шанс, что он сработает.
Я пытаюсь увидеть все запросы (DDL, DML), созданные из ORM.
Какой ORM вы используете конкретно? Например, если это Entity Framework 6+, это решение, похоже, может выполнить то, что вы ищете: stackoverflow.com/a/20751723/1549649





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