Примеры перехватов формирования SQL-запросов
SQLDataService позволяет осуществлять перехват формирования SQL-запроса к БД за счёт применения делегатов OnGenerateSQLSelect, AfterGenerateSQLSelectQuery, OnCreateCommand.
Примеры перехватов формирования SQL-запросов
:
static void Main()
{
//...
// создаем датасервис
ICSSoft.STORMNET.Business.SQLDataService ds = (ICSSoft.STORMNET.Business.SQLDataService)ICSSoft.STORMNET.Business.DataServiceProvider.DataService;
// перед формированием
ds.OnGenerateSQLSelect+=new ICSSoft.STORMNET.Business.OnGenerateSQLSelectEventHandler(ds_OnGenerateSQLSelect);
// после формирования
ds.AfterGenerateSQLSelectQuery+=new ICSSoft.STORMNET.Business.AfterGenerateSQLSelectQueryEventHandler(ds_AfterGenerateSQLSelectQuery);
// строка посылается на выполение ...
ds.OnCreateCommand+=new ICSSoft.STORMNET.Business.OnCreateCommandEventHandler(ds_OnCreateCommand);
//...
}
public static void ds_OnGenerateSQLSelect(object sender, ICSSoft.STORMNET.Business.GenerateSQLSelectQueryEventArgs e)
{
//...
if (e.CustomizationStruct.View == null) return;
//для Словарей ограничим общеупотребительными значениями...
if(e.CustomizationStruct.View.Name == "СловарьL")
{
e.CustomizationStruct.LimitFunction = AddОбщУпотр(e.CustomizationStruct.LimitFunction);
}
//...
}
public static void ds_AfterGenerateSQLSelectQuery(object sender, ICSSoft.STORMNET.Business.GenerateSQLSelectQueryEventArgs e)
{
//...
//для View ПеремИАрхив...
if (e.CustomizationStruct.View.Name == "ПеремИАрхив")
{
e.GeneratedQuery = System.Text.RegularExpressions.Regex.Replace(e.GeneratedQuery.ToUpper(),
"^SELECT","SELECT TOP 100");
}
//...
}
private void ds_OnCreateCommand(object sender, CreateCommandEventArgs e)
{
//...
//Для строки удаления Проживаний
if (e.Command.CommandText.StartsWith("DELETE FROM \"Проживание\""))
{
//...
}
//...
}