Здравствуйте, коллеги. Появился вопрос как из БП запустить экспорт Excel файла (нужно каждую неделю отправлять этот файл на email). Пробовал записывать файл с помощью GetExcelData из ExcelConverter. Но выходила ошибка с FETCH запросом - количество строк должно быть больше нуля. Подскажите пожалуйста как это лучше реализовать.
Нравится
Удалось решить проставлением значения batchsize:
var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "VwDoorTT"); esq.AddColumn("Id"); var collection = esq.GetEntityCollection(UserConnection); int count = collection.Count; var excelConverter = new ExcelConverter(); excelConverter.BatchSize = count; var data = excelConverter.GetExcelData(exportEsq, UserConnection); Set<byte[]>("ExcelFile", data);
Добрый день.
Прошу предоставить полный текст ошибки.
Mykhailo Storozhuk,
Добрый.
Terrasoft.Configuration.ExportToExcel.ExportToExcelException: Exception during export to excel. Inner exception Количество строк, указываемое в предложении FETCH, должно быть больше нуля. ---> System.Data.SqlClient.SqlException: Количество строк, указываемое в предложении FETCH, должно быть больше нуля.
в System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
в System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
в System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
в System.Data.SqlClient.SqlDataReader.get_MetaData()
в System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
в System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
в System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
в System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
в System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
в Polly.Policy.<>c__DisplayClass119_0`1.<Execute>b__0(Context ctx, CancellationToken ct)
в Polly.Policy.<>c__DisplayClass129_0`1.<ExecuteInternal>b__0(Context ctx, CancellationToken ct)
в Polly.Policy.<>c__DisplayClass103_0.<NoOp>b__1(Context ctx, CancellationToken ct)
в Polly.NoOp.NoOpEngine.Implementation[TResult](Func`3 action, Context context, CancellationToken cancellationToken)
в Polly.Policy.<>c.<NoOp>b__103_0(Action`2 action, Context context, CancellationToken cancellationToken)
в Polly.Policy.ExecuteInternal[TResult](Func`3 action, Context context, CancellationToken cancellationToken)
в Polly.Policy.Execute[TResult](Func`3 action, Context context, CancellationToken cancellationToken)
в Polly.Policy.Execute[TResult](Func`1 action)
в Terrasoft.DB.MSSql.MSSqlExecutor.FailoverExecute[TResult](DbCommand command, Func`1 func)
в Terrasoft.Core.DB.DBExecutor.FailoverExecuteReader(DbCommand command, Func`1 func)
в Terrasoft.Core.DB.DBExecutor.<ExecuteCommandAsync>d__88`1.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение ---
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
в Terrasoft.Core.DB.DBExecutor.ExecuteCommand[TResult](Func`2 commandExecutionCallback, String sqlText, QueryParameterCollection queryParameters, CancellationToken cancellationToken)
в Terrasoft.Core.DB.DBExecutor.InternalExecuteReader(String sqlText, QueryParameterCollection queryParameters, CommandBehavior behavior, CancellationToken cancellationToken)
в Terrasoft.Core.DB.DBExecutor.InternalExecuteReader(String sqlText)
в Terrasoft.Core.DB.Select.<ExecuteReaderAsync>d__54.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение ---
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
в Terrasoft.Core.DB.Select.ExecuteReader(DBExecutor dbExecutor)
в Terrasoft.Core.Entities.EntitySchemaQuery.<GetNativeDataReaderAsync>d__299.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение ---
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
в Terrasoft.Core.Entities.EntitySchemaQuery.GetNativeDataReader(UserConnection userConnection, Select selectQuery)
в Terrasoft.Core.Entities.EntitySchemaQuery.<GetDataReaderAsync>d__302.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение ---
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
в Terrasoft.Core.Entities.EntitySchemaQuery.GetDataReader(UserConnection userConnection, Select selectQuery)
в Terrasoft.Core.Entities.EntitySchemaQuery.<ExecuteReaderAsync>d__290.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение ---
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
в Terrasoft.Core.Entities.EntitySchemaQuery.ExecuteReader(UserConnection userConnection, EntitySchemaQueryOptions options)
в Terrasoft.Core.Entities.EntitySchemaQuery.<GetEntityCollectionAsync>d__342.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение ---
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
в Terrasoft.Core.Entities.EntitySchemaQuery.GetEntityCollection(UserConnection userConnection, EntitySchemaQueryOptions options)
в Terrasoft.Configuration.ExportToExcel.ExcelConverter.SaveData(EntitySchemaQuery entitySchemaQuery, UserConnection userConnection)
в Terrasoft.Configuration.ExportToExcel.ExcelConverter.GetExcelData(EntitySchemaQuery entitySchemaQuery, UserConnection userConnection)
--- Конец трассировки внутреннего стека исключений ---
в Terrasoft.Configuration.ExportToExcel.ExcelConverter.GetExcelData(EntitySchemaQuery entitySchemaQuery, UserConnection userConnection)
в Terrasoft.Core.Process.Report_TestMethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context)
в Terrasoft.Core.Process.ProcessScriptTask.InternalExecute(ProcessExecutingContext context)
в Terrasoft.Core.Process.ProcessFlowElement.ExecuteItem(ProcessExecutingContext context)
в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
Удалось решить проставлением значения batchsize:
var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "VwDoorTT"); esq.AddColumn("Id"); var collection = esq.GetEntityCollection(UserConnection); int count = collection.Count; var excelConverter = new ExcelConverter(); excelConverter.BatchSize = count; var data = excelConverter.GetExcelData(exportEsq, UserConnection); Set<byte[]>("ExcelFile", data);