diff --git a/src/ReC.Application/Common/Procedures/DeleteProcedure/DeleteObjectProcedure.cs b/src/ReC.Application/Common/Procedures/DeleteProcedure/DeleteObjectProcedure.cs index ecc2721..cddc69f 100644 --- a/src/ReC.Application/Common/Procedures/DeleteProcedure/DeleteObjectProcedure.cs +++ b/src/ReC.Application/Common/Procedures/DeleteProcedure/DeleteObjectProcedure.cs @@ -36,32 +36,21 @@ public class DeleteObjectProcedureHandler(IRepository repo, IOptionsMonitor Handle(DeleteObjectProcedure request, CancellationToken cancel) { - var execSql = new StringBuilder("EXEC @RC = [dbo].[PRREC_DELETE_OBJECT]"); - var parameters = new List(); - var separator = ' '; - - void Add(string name, object? value) - { - if (value is null) return; - execSql.AppendLine($"{separator}@{name} = @{name}"); - separator = ','; - parameters.Add(new SqlParameter($"@{name}", value)); - } - - Add("pENTITY", request.Entity); - Add("pSTART", request.Start.ToString()); - Add("pEND", request.End.ToString()); - Add("pFORCE", request.Force); + var sp = new StoredProcedureBuilder("EXEC @RC = [dbo].[PRREC_DELETE_OBJECT]") + .Add("pENTITY", request.Entity) + .Add("pSTART", request.Start.ToString()) + .Add("pEND", request.End.ToString()) + .Add("pFORCE", request.Force); var sql = new StringBuilder() .AppendLine("DECLARE @RC SMALLINT = 0;") - .Append(execSql).AppendLine(";") + .Append(sp.BuildSql()).AppendLine(";") .AppendLine("SELECT @RC;") .ToString(); try { - var result = await repo.ExecuteQueryRawAsync(sql, parameters.ToArray(), cancel); + var result = await repo.ExecuteQueryRawAsync(sql, sp.BuildParameters(), cancel); if (result > 0) { diff --git a/src/ReC.Application/Common/Procedures/InsertProcedure/InsertObjectProcedure.cs b/src/ReC.Application/Common/Procedures/InsertProcedure/InsertObjectProcedure.cs index dd13701..65df363 100644 --- a/src/ReC.Application/Common/Procedures/InsertProcedure/InsertObjectProcedure.cs +++ b/src/ReC.Application/Common/Procedures/InsertProcedure/InsertObjectProcedure.cs @@ -11,7 +11,7 @@ using ReC.Application.Endpoints.Commands; using ReC.Application.Profile.Commands; using ReC.Application.RecActions.Commands; using ReC.Application.Results.Commands; -using System.Text; +using System.Data; namespace ReC.Application.Common.Procedures.InsertProcedure; @@ -37,90 +37,62 @@ public class InsertObjectProcedureHandler(IRepository repo, IOptionsMonitor Handle(InsertObjectProcedure request, CancellationToken cancel) { - var sql = new StringBuilder("EXEC [dbo].[PRREC_INSERT_OBJECT]"); - var parameters = new List(); - var separator = ' '; - - void Add(string name, object? value, System.Data.SqlDbType? dbType = null) - { - if (value is null) return; - sql.AppendLine($"{separator}@{name} = @{name}"); - separator = ','; - if (dbType.HasValue) - parameters.Add(new SqlParameter($"@{name}", dbType.Value) { Value = value }); - else - parameters.Add(new SqlParameter($"@{name}", value)); - } - - Add("pENTITY", request.Entity); - Add("pADDED_WHO", request.AddedWho); - Add("pADDED_WHEN", DateTime.UtcNow); - - Add("pACTION_PROFILE_ID", request.Action?.ProfileId); - Add("pACTION_ACTIVE", request.Action?.Active); - Add("pACTION_SEQUENCE", request.Action?.Sequence, System.Data.SqlDbType.TinyInt); - Add("pACTION_ENDPOINT_ID", request.Action?.EndpointId); - Add("pACTION_ENDPOINT_AUTH_ID", request.Action?.EndpointAuthId); - Add("pACTION_ENDPOINT_PARAMS_ID", request.Action?.EndpointParamsId, System.Data.SqlDbType.SmallInt); - Add("pACTION_SQL_CONNECTION_ID", request.Action?.SqlConnectionId, System.Data.SqlDbType.SmallInt); - Add("pACTION_TYPE_ID", request.Action?.TypeId is not null ? (byte)request.Action.TypeId : null, System.Data.SqlDbType.TinyInt); - Add("pACTION_PRE_SQL", request.Action?.PreSql); - Add("pACTION_HEADER_SQL", request.Action?.HeaderSql); - Add("pACTION_BODY_SQL", request.Action?.BodySql); - Add("pACTION_POST_SQL", request.Action?.PostSql); - Add("pACTION_ERROR_ACTION_ID", request.Action?.ErrorActionId, System.Data.SqlDbType.TinyInt); - - Add("pENDPOINT_ACTIVE", request.Endpoint?.Active); - Add("pENDPOINT_DESCRIPTION", request.Endpoint?.Description); - Add("pENDPOINT_URI", request.Endpoint?.Uri); - - Add("pENDPOINT_AUTH_ACTIVE", request.EndpointAuth?.Active); - Add("pENDPOINT_AUTH_DESCRIPTION", request.EndpointAuth?.Description); - Add("pENDPOINT_AUTH_TYPE_ID", request.EndpointAuth?.TypeId, System.Data.SqlDbType.TinyInt); - Add("pENDPOINT_AUTH_API_KEY", request.EndpointAuth?.ApiKey); - Add("pENDPOINT_AUTH_API_VALUE", request.EndpointAuth?.ApiValue); - Add("pENDPOINT_AUTH_API_KEY_ADD_TO_ID", request.EndpointAuth?.ApiKeyAddToId); - Add("pENDPOINT_AUTH_TOKEN", request.EndpointAuth?.Token); - Add("pENDPOINT_AUTH_USERNAME", request.EndpointAuth?.Username); - Add("pENDPOINT_AUTH_PASSWORD", request.EndpointAuth?.Password); - Add("pENDPOINT_AUTH_DOMAIN", request.EndpointAuth?.Domain); - Add("pENDPOINT_AUTH_WORKSTATION", request.EndpointAuth?.Workstation); - - Add("pPROFILE_ACTIVE", request.Profile?.Active); - Add("pPROFILE_TYPE_ID", request.Profile?.TypeId, System.Data.SqlDbType.TinyInt); - Add("pPROFILE_MANDANTOR", request.Profile?.Mandantor); - Add("pPROFILE_NAME", request.Profile?.Name); - Add("pPROFILE_DESCRIPTION", request.Profile?.Description); - Add("pPROFILE_LOG_LEVEL_ID", request.Profile?.LogLevelId, System.Data.SqlDbType.TinyInt); - Add("pPROFILE_LANGUAGE_ID", request.Profile?.LanguageId, System.Data.SqlDbType.SmallInt); - - Add("pRESULT_ACTION_ID", request.Result?.ActionId); - Add("pRESULT_STATUS_ID", request.Result?.StatusId, System.Data.SqlDbType.SmallInt); - Add("pRESULT_TYPE_ID", request.Result?.Type is not null ? (byte)request.Result.Type : null, System.Data.SqlDbType.TinyInt); - Add("pRESULT_HEADER", request.Result?.Header); - Add("pRESULT_BODY", request.Result?.Body); - Add("pRESULT_INFO", request.Result?.Info); - Add("pRESULT_ERROR", request.Result?.Error); - - Add("pENDPOINT_PARAMS_ACTIVE", request.EndpointParams?.Active); - Add("pENDPOINT_PARAMS_DESCRIPTION", request.EndpointParams?.Description); - Add("pENDPOINT_PARAMS_GROUP_ID", request.EndpointParams?.GroupId, System.Data.SqlDbType.SmallInt); - Add("pENDPOINT_PARAMS_SEQUENCE", request.EndpointParams?.Sequence, System.Data.SqlDbType.TinyInt); - Add("pENDPOINT_PARAMS_KEY", request.EndpointParams?.Key); - Add("pENDPOINT_PARAMS_VALUE", request.EndpointParams?.Value); - - // output parameter — always added - sql.AppendLine($"{separator}@oGUID = @oGUID OUTPUT"); - parameters.Add(new SqlParameter - { - ParameterName = "@oGUID", - SqlDbType = System.Data.SqlDbType.BigInt, - Direction = System.Data.ParameterDirection.Output - }); + var sp = new StoredProcedureBuilder("EXEC [dbo].[PRREC_INSERT_OBJECT]") + .Add("pENTITY", request.Entity) + .Add("pADDED_WHO", request.AddedWho) + .Add("pADDED_WHEN", DateTime.UtcNow) + .Add("pACTION_PROFILE_ID", request.Action?.ProfileId) + .Add("pACTION_ACTIVE", request.Action?.Active) + .Add("pACTION_SEQUENCE", request.Action?.Sequence, SqlDbType.TinyInt) + .Add("pACTION_ENDPOINT_ID", request.Action?.EndpointId) + .Add("pACTION_ENDPOINT_AUTH_ID", request.Action?.EndpointAuthId) + .Add("pACTION_ENDPOINT_PARAMS_ID", request.Action?.EndpointParamsId, SqlDbType.SmallInt) + .Add("pACTION_SQL_CONNECTION_ID", request.Action?.SqlConnectionId, SqlDbType.SmallInt) + .Add("pACTION_TYPE_ID", request.Action?.TypeId is not null ? (byte)request.Action.TypeId : null, SqlDbType.TinyInt) + .Add("pACTION_PRE_SQL", request.Action?.PreSql) + .Add("pACTION_HEADER_SQL", request.Action?.HeaderSql) + .Add("pACTION_BODY_SQL", request.Action?.BodySql) + .Add("pACTION_POST_SQL", request.Action?.PostSql) + .Add("pACTION_ERROR_ACTION_ID", request.Action?.ErrorActionId, SqlDbType.TinyInt) + .Add("pENDPOINT_ACTIVE", request.Endpoint?.Active) + .Add("pENDPOINT_DESCRIPTION", request.Endpoint?.Description) + .Add("pENDPOINT_URI", request.Endpoint?.Uri) + .Add("pENDPOINT_AUTH_ACTIVE", request.EndpointAuth?.Active) + .Add("pENDPOINT_AUTH_DESCRIPTION", request.EndpointAuth?.Description) + .Add("pENDPOINT_AUTH_TYPE_ID", request.EndpointAuth?.TypeId, SqlDbType.TinyInt) + .Add("pENDPOINT_AUTH_API_KEY", request.EndpointAuth?.ApiKey) + .Add("pENDPOINT_AUTH_API_VALUE", request.EndpointAuth?.ApiValue) + .Add("pENDPOINT_AUTH_API_KEY_ADD_TO_ID", request.EndpointAuth?.ApiKeyAddToId) + .Add("pENDPOINT_AUTH_TOKEN", request.EndpointAuth?.Token) + .Add("pENDPOINT_AUTH_USERNAME", request.EndpointAuth?.Username) + .Add("pENDPOINT_AUTH_PASSWORD", request.EndpointAuth?.Password) + .Add("pENDPOINT_AUTH_DOMAIN", request.EndpointAuth?.Domain) + .Add("pENDPOINT_AUTH_WORKSTATION", request.EndpointAuth?.Workstation) + .Add("pPROFILE_ACTIVE", request.Profile?.Active) + .Add("pPROFILE_TYPE_ID", request.Profile?.TypeId, SqlDbType.TinyInt) + .Add("pPROFILE_MANDANTOR", request.Profile?.Mandantor) + .Add("pPROFILE_NAME", request.Profile?.Name) + .Add("pPROFILE_DESCRIPTION", request.Profile?.Description) + .Add("pPROFILE_LOG_LEVEL_ID", request.Profile?.LogLevelId, SqlDbType.TinyInt) + .Add("pPROFILE_LANGUAGE_ID", request.Profile?.LanguageId, SqlDbType.SmallInt) + .Add("pRESULT_ACTION_ID", request.Result?.ActionId) + .Add("pRESULT_STATUS_ID", request.Result?.StatusId, SqlDbType.SmallInt) + .Add("pRESULT_TYPE_ID", request.Result?.Type is not null ? (byte)request.Result.Type : null, SqlDbType.TinyInt) + .Add("pRESULT_HEADER", request.Result?.Header) + .Add("pRESULT_BODY", request.Result?.Body) + .Add("pRESULT_INFO", request.Result?.Info) + .Add("pRESULT_ERROR", request.Result?.Error) + .Add("pENDPOINT_PARAMS_ACTIVE", request.EndpointParams?.Active) + .Add("pENDPOINT_PARAMS_DESCRIPTION", request.EndpointParams?.Description) + .Add("pENDPOINT_PARAMS_GROUP_ID", request.EndpointParams?.GroupId, SqlDbType.SmallInt) + .Add("pENDPOINT_PARAMS_SEQUENCE", request.EndpointParams?.Sequence, SqlDbType.TinyInt) + .Add("pENDPOINT_PARAMS_KEY", request.EndpointParams?.Key) + .Add("pENDPOINT_PARAMS_VALUE", request.EndpointParams?.Value) + .AddOutput("oGUID", SqlDbType.BigInt); try { - await repo.ExecuteQueryRawAsync(sql.ToString(), parameters.ToArray(), cancel); + await repo.ExecuteQueryRawAsync(sp.BuildSql(), sp.BuildParameters(), cancel); } catch (SqlException ex) { @@ -130,12 +102,12 @@ public class InsertObjectProcedureHandler(IRepository repo, IOptionsMonitor _parameters = []; + private char _separator = ' '; + + public StoredProcedureBuilder(string execPrefix) + { + _sql = new StringBuilder(execPrefix); + } + + public StoredProcedureBuilder Add(string name, object? value, SqlDbType? dbType = null) + { + if (value is null) return this; + + _sql.AppendLine($"{_separator}@{name} = @{name}"); + _separator = ','; + + if (dbType.HasValue) + _parameters.Add(new SqlParameter($"@{name}", dbType.Value) { Value = value }); + else + _parameters.Add(new SqlParameter($"@{name}", value)); + + return this; + } + + public StoredProcedureBuilder AddOutput(string name, SqlDbType dbType) + { + _sql.AppendLine($"{_separator}@{name} = @{name} OUTPUT"); + _separator = ','; + + _parameters.Add(new SqlParameter + { + ParameterName = $"@{name}", + SqlDbType = dbType, + Direction = ParameterDirection.Output + }); + + return this; + } + + public string BuildSql() => _sql.ToString(); + + public SqlParameter[] BuildParameters() => [.. _parameters]; + + public SqlParameter? GetParameter(string name) => + _parameters.Find(p => p.ParameterName == $"@{name}"); +} diff --git a/src/ReC.Application/Common/Procedures/UpdateProcedure/UpdateObjectProcedure.cs b/src/ReC.Application/Common/Procedures/UpdateProcedure/UpdateObjectProcedure.cs index 5c05772..dffec2d 100644 --- a/src/ReC.Application/Common/Procedures/UpdateProcedure/UpdateObjectProcedure.cs +++ b/src/ReC.Application/Common/Procedures/UpdateProcedure/UpdateObjectProcedure.cs @@ -6,6 +6,7 @@ using Microsoft.Extensions.Options; using ReC.Application.Common.Exceptions; using ReC.Application.Common.Options; using ReC.Application.Common.Procedures.UpdateProcedure.Dto; +using System.Data; using System.Text; namespace ReC.Application.Common.Procedures.UpdateProcedure; @@ -37,88 +38,68 @@ public class UpdateObjectProcedureHandler(IRepository repo, IOptionsMonitor Handle(UpdateObjectProcedure request, CancellationToken cancel) { - var execSql = new StringBuilder("EXEC @RC = [dbo].[PRREC_UPDATE_OBJECT]"); - var parameters = new List(); - var separator = ' '; - - void Add(string name, object? value, System.Data.SqlDbType? dbType = null) - { - if (value is null) return; - execSql.AppendLine($"{separator}@{name} = @{name}"); - separator = ','; - if (dbType.HasValue) - parameters.Add(new SqlParameter($"@{name}", dbType.Value) { Value = value }); - else - parameters.Add(new SqlParameter($"@{name}", value)); - } - - Add("pENTITY", request.Entity); - Add("pGUID", request.Id); - Add("pCHANGED_WHO", request.ChangedWho); - Add("pCHANGED_WHEN", DateTime.UtcNow); - - Add("pACTION_PROFILE_ID", request.Action.ProfileId); - Add("pACTION_ACTIVE", request.Action.Active); - Add("pACTION_SEQUENCE", request.Action.Sequence, System.Data.SqlDbType.TinyInt); - Add("pACTION_ENDPOINT_ID", request.Action.EndpointId); - Add("pACTION_ENDPOINT_AUTH_ID", request.Action.EndpointAuthId); - Add("pACTION_ENDPOINT_PARAMS_ID", request.Action.EndpointParamsId, System.Data.SqlDbType.SmallInt); - Add("pACTION_SQL_CONNECTION_ID", request.Action.SqlConnectionId, System.Data.SqlDbType.SmallInt); - Add("pACTION_TYPE_ID", request.Action.TypeId, System.Data.SqlDbType.TinyInt); - Add("pACTION_PRE_SQL", request.Action.PreSql); - Add("pACTION_HEADER_SQL", request.Action.HeaderSql); - Add("pACTION_BODY_SQL", request.Action.BodySql); - Add("pACTION_POST_SQL", request.Action.PostSql); - Add("pACTION_ERROR_ACTION_ID", request.Action.ErrorActionId, System.Data.SqlDbType.TinyInt); - - Add("pENDPOINT_ACTIVE", request.Endpoint.Active); - Add("pENDPOINT_DESCRIPTION", request.Endpoint.Description); - Add("pENDPOINT_URI", request.Endpoint.Uri); - - Add("pENDPOINT_AUTH_ACTIVE", request.EndpointAuth.Active); - Add("pENDPOINT_AUTH_DESCRIPTION", request.EndpointAuth.Description); - Add("pENDPOINT_AUTH_TYPE_ID", request.EndpointAuth.TypeId, System.Data.SqlDbType.TinyInt); - Add("pENDPOINT_AUTH_API_KEY", request.EndpointAuth.ApiKey); - Add("pENDPOINT_AUTH_API_VALUE", request.EndpointAuth.ApiValue); - Add("pENDPOINT_AUTH_API_KEY_ADD_TO_ID", request.EndpointAuth.ApiKeyAddToId); - Add("pENDPOINT_AUTH_TOKEN", request.EndpointAuth.Token); - Add("pENDPOINT_AUTH_USERNAME", request.EndpointAuth.Username); - Add("pENDPOINT_AUTH_PASSWORD", request.EndpointAuth.Password); - Add("pENDPOINT_AUTH_DOMAIN", request.EndpointAuth.Domain); - Add("pENDPOINT_AUTH_WORKSTATION", request.EndpointAuth.Workstation); - - Add("pENDPOINT_PARAMS_ACTIVE", request.EndpointParams.Active); - Add("pENDPOINT_PARAMS_DESCRIPTION", request.EndpointParams.Description); - Add("pENDPOINT_PARAMS_GROUP_ID", request.EndpointParams.GroupId, System.Data.SqlDbType.SmallInt); - Add("pENDPOINT_PARAMS_SEQUENCE", request.EndpointParams.Sequence, System.Data.SqlDbType.TinyInt); - Add("pENDPOINT_PARAMS_KEY", request.EndpointParams.Key); - Add("pENDPOINT_PARAMS_VALUE", request.EndpointParams.Value); - - Add("pPROFILE_ACTIVE", request.Profile.Active); - Add("pPROFILE_TYPE_ID", request.Profile.TypeId, System.Data.SqlDbType.TinyInt); - Add("pPROFILE_MANDANTOR", request.Profile.Mandantor); - Add("pPROFILE_NAME", request.Profile.Name); - Add("pPROFILE_DESCRIPTION", request.Profile.Description); - Add("pPROFILE_LOG_LEVEL_ID", request.Profile.LogLevelId, System.Data.SqlDbType.TinyInt); - Add("pPROFILE_LANGUAGE_ID", request.Profile.LanguageId, System.Data.SqlDbType.SmallInt); - Add("pPROFILE_FIRST_RUN", request.Profile.FirstRun); - Add("pPROFILE_LAST_RUN", request.Profile.LastRun); - Add("pPROFILE_LAST_RESULT", request.Profile.LastResult); - - Add("pRESULT_ACTION_ID", request.Result.ActionId); - Add("pRESULT_STATUS_ID", request.Result.StatusId, System.Data.SqlDbType.SmallInt); - Add("pRESULT_HEADER", request.Result.Header); - Add("pRESULT_BODY", request.Result.Body); + var sp = new StoredProcedureBuilder("EXEC @RC = [dbo].[PRREC_UPDATE_OBJECT]") + .Add("pENTITY", request.Entity) + .Add("pGUID", request.Id) + .Add("pCHANGED_WHO", request.ChangedWho) + .Add("pCHANGED_WHEN", DateTime.UtcNow) + .Add("pACTION_PROFILE_ID", request.Action.ProfileId) + .Add("pACTION_ACTIVE", request.Action.Active) + .Add("pACTION_SEQUENCE", request.Action.Sequence, SqlDbType.TinyInt) + .Add("pACTION_ENDPOINT_ID", request.Action.EndpointId) + .Add("pACTION_ENDPOINT_AUTH_ID", request.Action.EndpointAuthId) + .Add("pACTION_ENDPOINT_PARAMS_ID", request.Action.EndpointParamsId, SqlDbType.SmallInt) + .Add("pACTION_SQL_CONNECTION_ID", request.Action.SqlConnectionId, SqlDbType.SmallInt) + .Add("pACTION_TYPE_ID", request.Action.TypeId, SqlDbType.TinyInt) + .Add("pACTION_PRE_SQL", request.Action.PreSql) + .Add("pACTION_HEADER_SQL", request.Action.HeaderSql) + .Add("pACTION_BODY_SQL", request.Action.BodySql) + .Add("pACTION_POST_SQL", request.Action.PostSql) + .Add("pACTION_ERROR_ACTION_ID", request.Action.ErrorActionId, SqlDbType.TinyInt) + .Add("pENDPOINT_ACTIVE", request.Endpoint.Active) + .Add("pENDPOINT_DESCRIPTION", request.Endpoint.Description) + .Add("pENDPOINT_URI", request.Endpoint.Uri) + .Add("pENDPOINT_AUTH_ACTIVE", request.EndpointAuth.Active) + .Add("pENDPOINT_AUTH_DESCRIPTION", request.EndpointAuth.Description) + .Add("pENDPOINT_AUTH_TYPE_ID", request.EndpointAuth.TypeId, SqlDbType.TinyInt) + .Add("pENDPOINT_AUTH_API_KEY", request.EndpointAuth.ApiKey) + .Add("pENDPOINT_AUTH_API_VALUE", request.EndpointAuth.ApiValue) + .Add("pENDPOINT_AUTH_API_KEY_ADD_TO_ID", request.EndpointAuth.ApiKeyAddToId) + .Add("pENDPOINT_AUTH_TOKEN", request.EndpointAuth.Token) + .Add("pENDPOINT_AUTH_USERNAME", request.EndpointAuth.Username) + .Add("pENDPOINT_AUTH_PASSWORD", request.EndpointAuth.Password) + .Add("pENDPOINT_AUTH_DOMAIN", request.EndpointAuth.Domain) + .Add("pENDPOINT_AUTH_WORKSTATION", request.EndpointAuth.Workstation) + .Add("pENDPOINT_PARAMS_ACTIVE", request.EndpointParams.Active) + .Add("pENDPOINT_PARAMS_DESCRIPTION", request.EndpointParams.Description) + .Add("pENDPOINT_PARAMS_GROUP_ID", request.EndpointParams.GroupId, SqlDbType.SmallInt) + .Add("pENDPOINT_PARAMS_SEQUENCE", request.EndpointParams.Sequence, SqlDbType.TinyInt) + .Add("pENDPOINT_PARAMS_KEY", request.EndpointParams.Key) + .Add("pENDPOINT_PARAMS_VALUE", request.EndpointParams.Value) + .Add("pPROFILE_ACTIVE", request.Profile.Active) + .Add("pPROFILE_TYPE_ID", request.Profile.TypeId, SqlDbType.TinyInt) + .Add("pPROFILE_MANDANTOR", request.Profile.Mandantor) + .Add("pPROFILE_NAME", request.Profile.Name) + .Add("pPROFILE_DESCRIPTION", request.Profile.Description) + .Add("pPROFILE_LOG_LEVEL_ID", request.Profile.LogLevelId, SqlDbType.TinyInt) + .Add("pPROFILE_LANGUAGE_ID", request.Profile.LanguageId, SqlDbType.SmallInt) + .Add("pPROFILE_FIRST_RUN", request.Profile.FirstRun) + .Add("pPROFILE_LAST_RUN", request.Profile.LastRun) + .Add("pPROFILE_LAST_RESULT", request.Profile.LastResult) + .Add("pRESULT_ACTION_ID", request.Result.ActionId) + .Add("pRESULT_STATUS_ID", request.Result.StatusId, SqlDbType.SmallInt) + .Add("pRESULT_HEADER", request.Result.Header) + .Add("pRESULT_BODY", request.Result.Body); var sql = new StringBuilder() .AppendLine("DECLARE @RC SMALLINT = 0;") - .Append(execSql).AppendLine(";") + .Append(sp.BuildSql()).AppendLine(";") .AppendLine("SELECT @RC;") .ToString(); try { - var result = await repo.ExecuteQueryRawAsync(sql, parameters.ToArray(), cancel); + var result = await repo.ExecuteQueryRawAsync(sql, sp.BuildParameters(), cancel); if (result > 0) {