public override async Task <int> ExecuteNonQueryAsync(CancellationToken cancellationToken)
            {
                _isAsync = true;

                base.SetCommand(true);

                if (_preparedQuery.Commands.Length == 1)
                {
                    await _dataConnection.InitCommandAsync(
                        CommandType.Text, _preparedQuery.Commands[0], null, _preparedQuery.QueryHints, cancellationToken);

                    if (_preparedQuery.Parameters != null)
                    {
                        foreach (var p in _preparedQuery.Parameters)
                        {
                            _dataConnection.Command.Parameters.Add(p);
                        }
                    }

                    return(await _dataConnection.ExecuteNonQueryAsync(cancellationToken));
                }

                for (var i = 0; i < _preparedQuery.Commands.Length; i++)
                {
                    await _dataConnection.InitCommandAsync(
                        CommandType.Text, _preparedQuery.Commands[i], null, i == 0?_preparedQuery.QueryHints : null, cancellationToken);

                    if (i == 0 && _preparedQuery.Parameters != null)
                    {
                        foreach (var p in _preparedQuery.Parameters)
                        {
                            _dataConnection.Command.Parameters.Add(p);
                        }
                    }

                    if (i < _preparedQuery.Commands.Length - 1 && _preparedQuery.Commands[i].StartsWith("DROP"))
                    {
                        try
                        {
                            await _dataConnection.ExecuteNonQueryAsync(cancellationToken);
                        }
                        catch
                        {
                        }
                    }
                    else
                    {
                        await _dataConnection.ExecuteNonQueryAsync(cancellationToken);
                    }
                }

                return(-1);
            }
示例#2
0
        /// <summary>
        /// Executes command asynchronously and returns number of affected records.
        /// </summary>
        /// <param name="cancellationToken">Asynchronous operation cancellation token.</param>
        /// <returns>Task with number of records, affected by command execution.</returns>
        public async Task <int> ExecuteAsync(CancellationToken cancellationToken)
        {
            await DataConnection.InitCommandAsync(CommandType, CommandText, Parameters, cancellationToken);

            if (Parameters != null && Parameters.Length > 0)
            {
                SetParameters(DataConnection, Parameters);
            }

            return(await DataConnection.ExecuteNonQueryAsync(cancellationToken));
        }
示例#3
0
        /// <summary>
        /// Executes command asynchronously and returns number of affected records.
        /// </summary>
        /// <param name="cancellationToken">Asynchronous operation cancellation token.</param>
        /// <returns>Task with number of records, affected by command execution.</returns>
        public async Task <int> ExecuteAsync(CancellationToken cancellationToken)
        {
            await DataConnection.EnsureConnectionAsync(cancellationToken);

            DataConnection.InitCommand(CommandType, CommandText, Parameters, null);

            var hasParameters = Parameters != null && Parameters.Length > 0;

            if (hasParameters)
            {
                SetParameters(DataConnection, Parameters);
            }

            var commandResult = await DataConnection.ExecuteNonQueryAsync(cancellationToken);

            if (hasParameters)
            {
                RebindParameters(DataConnection, Parameters);
            }

            return(commandResult);
        }