Aleksey писал(а):И втрой вариант, реализовать свои методы отмены или передачи конекшена через свой кастомный адаптер для PostgreSQL
Здравствуйте. Подключение к базе я смог получить, но я не могу "поймать" создание команд (IDbCommand). Я пробовал написать классы, унаследованные от StiOracleConnector / StiOracleAdapterService / StiOracleDatabase, и наблюдать за вызовом virtual-методов, но никто из них не занимается заполнением StiDataSource.
Суть проблемы: узнать какие запросы отправляет отчёт.
Заранее благодарен за помощь.
Вот, кстати, реализация получения текущего подключения (через событие DbConnectionBase.StateChange можно отлавливать момент открытия соединения). Вдруг кому-то пригодится.
Код: Выделить всё
public class MyDatabase : StiOracleDatabase
{
protected override string DataAdapterType { get; } = typeof(MyAdapter).FullName;
public MyDatabase()
: this(string.Empty, string.Empty)
{
}
public MyDatabase(string name, string connectionString)
: base(name, connectionString)
{
}
public MyDatabase(string name, string alias, string connectionString)
: base(name, alias, connectionString)
{
}
public MyDatabase(string name, string alias, string connectionString, bool promptUserNameAndpassword)
: base(name, alias, connectionString, promptUserNameAndpassword)
{
}
public MyDatabase(string name, string alias, string connectionString, bool promptUserNameAndpassword, string key)
: base(name, alias, connectionString, promptUserNameAndpassword, key)
{
}
public override StiSqlAdapterService GetDataAdapter() => new MyAdapter();
}
Адаптер:
Код: Выделить всё
public class MyAdapter : StiOracleAdapterService
{
public override void CreateConnectionInDataStore(StiDictionary dictionary, StiSqlDatabase database)
{
base.CreateConnectionInDataStore(dictionary, database);
// Подключения можно получить из DataStore:
var connection = dictionary.DataStore[0].Data as OracleConnection;
}
}
Добавление своей реализации:
Код: Выделить всё
StiReport.Dictionary.Databases.Add(new MyDatabase(name, connectionString));