示例#1
0
        public SqlResponse Execute(string sql)
        {
            EnsureInitialized();
            SqlResponse result = new SqlResponse();

            try
            {
                DataTable     results = Database.GetDataTable(sql, CommandType.Text);
                List <object> rows    = new List <object>();
                foreach (DataRow row in results.Rows)
                {
                    rows.Add(row);
                }

                result.Results = rows.ToArray();
                result.Count   = results.Rows.Count;
            }
            catch (Exception ex)
            {
                result.Success = false;
                result.Message = ex.Message;
                result.Results = new object[] { };
            }

            return(result);
        }
示例#2
0
        private static void RunTestQuery(OracleJavaScriptSqlProvider db)
        {
            SqlResponse response = db.Execute("SELECT * FROM diamond WHERE ROWNUM <= 100");

            Expect.IsTrue(response.Count == 100);

            foreach (object result in response.Results)
            {
                OutLineFormat("{0}\r\n", result.PropertiesToString());
            }
        }
示例#3
0
        public static SqlResponse ToSqlResponse(this Exception ex)
        {
            var otherErrorResponse = new SqlResponse
            {
                Error = new SqlError
                {
                    Code    = -1,
                    Message = ex.Message
                }
            };

            return(otherErrorResponse);
        }
示例#4
0
        public static SqlResponse ToSqlResponse(this string errorMessage)
        {
            var otherErrorResponse = new SqlResponse
            {
                Error = new SqlError
                {
                    Code    = -1,
                    Message = errorMessage
                }
            };

            return(otherErrorResponse);
        }
 protected async Task ProcessStoredProcedureExecuteResponse(SqlResponse response, AsyncWrappingCommonArgs async)
 {
     try
     {
         if (response.Count > 0)
         {
             OutputParameters.Enqueue(await ReadRow(async).ConfigureAwait(false));
         }
     }
     catch (IOException ex)
     {
         throw IscException.ForIOException(ex);
     }
 }
 protected async Task ProcessStoredProcedureExecuteResponse(SqlResponse response, AsyncWrappingCommonArgs async)
 {
     try
     {
         if (response.Count > 0)
         {
             _outputParams.Enqueue(await ReadRow(async).ConfigureAwait(false));
         }
     }
     catch (IOException ex)
     {
         throw IscException.ForErrorCode(IscCodes.isc_network_error, ex);
     }
 }
示例#7
0
 protected void ProcessStoredProcedureExecuteResponse(SqlResponse response)
 {
     try
     {
         if (response.Count > 0)
         {
             _outputParams.Enqueue(ReadRow());
         }
     }
     catch (IOException ex)
     {
         throw IscException.ForErrorCode(IscCodes.isc_network_error, ex);
     }
 }
 protected void ProcessStoredProcedureExecuteResponse(SqlResponse response)
 {
     try
     {
         if (response.Count > 0)
         {
             this.outputParams.Enqueue(this.ReadDataRow());
         }
     }
     catch (IOException)
     {
         throw new IscException(IscCodes.isc_net_read_err);
     }
 }
示例#9
0
 protected void ProcessStoredProcedureExecuteResponse(SqlResponse response)
 {
     try
     {
         if (response.Count > 0)
         {
             var row = AllocNewRow();
             ReadRow(row);
             _outputParams.Enqueue(row);
         }
     }
     catch (IOException ex)
     {
         throw IscException.ForErrorCode(IscCodes.isc_net_read_err, ex);
     }
 }
    public override async ValueTask ExecuteAsync(int timeout, IDescriptorFiller descriptorFiller, CancellationToken cancellationToken = default)
    {
        EnsureNotDeallocated();

        Clear();

        try
        {
            RecordsAffected = -1;

            await SendExecuteToBufferAsync(timeout, descriptorFiller, cancellationToken).ConfigureAwait(false);

            await _database.Xdr.FlushAsync(cancellationToken).ConfigureAwait(false);

            var numberOfResponses = (StatementType == DbStatementType.StoredProcedure ? 1 : 0) + 1;
            try
            {
                SqlResponse sqlStoredProcedureResponse = null;
                if (StatementType == DbStatementType.StoredProcedure)
                {
                    numberOfResponses--;
                    sqlStoredProcedureResponse = (SqlResponse)await _database.ReadResponseAsync(cancellationToken).ConfigureAwait(false);
                    await ProcessStoredProcedureExecuteResponseAsync(sqlStoredProcedureResponse, cancellationToken).ConfigureAwait(false);
                }

                numberOfResponses--;
                var executeResponse = (GenericResponse)await _database.ReadResponseAsync(cancellationToken).ConfigureAwait(false);
                await ProcessExecuteResponseAsync(executeResponse, cancellationToken).ConfigureAwait(false);
            }
            finally
            {
                await(Database as GdsDatabase).SafeFinishFetchingAsync(numberOfResponses, cancellationToken).ConfigureAwait(false);
            }

            // we need to split this in two, to allow server handle op_cancel properly

            if (DoRecordsAffected)
            {
                await SendInfoSqlToBufferAsync(RowsAffectedInfoItems, IscCodes.ROWS_AFFECTED_BUFFER_SIZE, cancellationToken).ConfigureAwait(false);

                await _database.Xdr.FlushAsync(cancellationToken).ConfigureAwait(false);

                numberOfResponses = 1;
                try
                {
                    numberOfResponses--;
                    var rowsAffectedResponse = (GenericResponse)await _database.ReadResponseAsync(cancellationToken).ConfigureAwait(false);

                    RecordsAffected = ProcessRecordsAffectedBuffer(await ProcessInfoSqlResponseAsync(rowsAffectedResponse, cancellationToken).ConfigureAwait(false));
                }
                finally
                {
                    await(Database as GdsDatabase).SafeFinishFetchingAsync(numberOfResponses, cancellationToken).ConfigureAwait(false);
                }
            }

            State = StatementState.Executed;
        }
        catch (IOException ex)
        {
            State = StatementState.Error;
            throw IscException.ForIOException(ex);
        }
    }
示例#11
0
        public override void Execute()
        {
            if (_state == StatementState.Deallocated)
            {
                throw new InvalidOperationException("Statement is not correctly created.");
            }

            Clear();

            try
            {
                RecordsAffected = -1;

                SendExecuteToBuffer();

                var readRowsAffectedResponse = false;
                if (ReturnRecordsAffected &&
                    (StatementType == DbStatementType.Insert ||
                     StatementType == DbStatementType.Delete ||
                     StatementType == DbStatementType.Update ||
                     StatementType == DbStatementType.StoredProcedure ||
                     StatementType == DbStatementType.Select))
                {
                    SendInfoSqlToBuffer(RowsAffectedInfoItems, IscCodes.ROWS_AFFECTED_BUFFER_SIZE);

                    readRowsAffectedResponse = true;
                }

                _database.XdrStream.Flush();

                var numberOfResponses =
                    (StatementType == DbStatementType.StoredProcedure ? 1 : 0) + 1 + (readRowsAffectedResponse ? 1 : 0);
                try
                {
                    SqlResponse sqlStoredProcedureResponse = null;
                    if (StatementType == DbStatementType.StoredProcedure)
                    {
                        numberOfResponses--;
                        sqlStoredProcedureResponse = _database.ReadSqlResponse();
                        ProcessStoredProcedureExecuteResponse(sqlStoredProcedureResponse);
                    }

                    numberOfResponses--;
                    var executeResponse = _database.ReadGenericResponse();

                    GenericResponse rowsAffectedResponse = null;
                    if (readRowsAffectedResponse)
                    {
                        numberOfResponses--;
                        rowsAffectedResponse = _database.ReadGenericResponse();
                    }

                    ProcessExecuteResponse(executeResponse);
                    if (readRowsAffectedResponse)
                    {
                        RecordsAffected = ProcessRecordsAffectedBuffer(ProcessInfoSqlResponse(rowsAffectedResponse));
                    }
                }
                finally
                {
                    SafeFinishFetching(ref numberOfResponses);
                }

                _state = StatementState.Executed;
            }
            catch (IOException ex)
            {
                _state = StatementState.Error;
                throw IscException.ForErrorCode(IscCodes.isc_net_read_err, ex);
            }
        }
        public override void Execute()
        {
            if (State == StatementState.Deallocated)
            {
                throw new InvalidOperationException("Statement is not correctly created.");
            }

            Clear();

            try
            {
                RecordsAffected = -1;

                SendExecuteToBuffer();

                _database.Xdr.Flush();

                var numberOfResponses = (StatementType == DbStatementType.StoredProcedure ? 1 : 0) + 1;
                try
                {
                    SqlResponse sqlStoredProcedureResponse = null;
                    if (StatementType == DbStatementType.StoredProcedure)
                    {
                        numberOfResponses--;
                        sqlStoredProcedureResponse = _database.ReadResponse <SqlResponse>();
                        ProcessStoredProcedureExecuteResponse(sqlStoredProcedureResponse);
                    }

                    numberOfResponses--;
                    var executeResponse = _database.ReadResponse <GenericResponse>();
                    ProcessExecuteResponse(executeResponse);
                }
                finally
                {
                    SafeFinishFetching(ref numberOfResponses);
                }

                // we need to split this in two, to allow server handle op_cancel properly

                if (DoRecordsAffected)
                {
                    SendInfoSqlToBuffer(RowsAffectedInfoItems, IscCodes.ROWS_AFFECTED_BUFFER_SIZE);

                    _database.Xdr.Flush();

                    numberOfResponses = 1;
                    try
                    {
                        numberOfResponses--;
                        var rowsAffectedResponse = _database.ReadResponse <GenericResponse>();
                        RecordsAffected = ProcessRecordsAffectedBuffer(ProcessInfoSqlResponse(rowsAffectedResponse));
                    }
                    finally
                    {
                        SafeFinishFetching(ref numberOfResponses);
                    }
                }

                State = StatementState.Executed;
            }
            catch (IOException ex)
            {
                State = StatementState.Error;
                throw IscException.ForErrorCode(IscCodes.isc_network_error, ex);
            }
        }
示例#13
0
        public override void Execute()
        {
            if (_state == StatementState.Deallocated)
            {
                throw new InvalidOperationException("Statement is not correctly created.");
            }

            // Clear data
            Clear();

            lock (_database.SyncObject)
            {
                try
                {
                    RecordsAffected = -1;

                    SendExecuteToBuffer();

                    _database.XdrStream.Flush();

                    // sql?, execute
                    int numberOfResponses =
                        (StatementType == DbStatementType.StoredProcedure ? 1 : 0) + 1;
                    try
                    {
                        SqlResponse sqlStoredProcedureResponse = null;
                        if (StatementType == DbStatementType.StoredProcedure)
                        {
                            numberOfResponses--;
                            sqlStoredProcedureResponse = _database.ReadSqlResponse();
                            ProcessStoredProcedureExecuteResponse(sqlStoredProcedureResponse);
                        }

                        numberOfResponses--;
                        GenericResponse executeResponse = _database.ReadGenericResponse();
                        ProcessExecuteResponse(executeResponse);
                    }
                    finally
                    {
                        SafeFinishFetching(ref numberOfResponses);
                    }

                    //we need to split this in two, to alloow server handle op_cancel properly

                    // Obtain records affected by query execution
                    if (ReturnRecordsAffected &&
                        (StatementType == DbStatementType.Insert ||
                         StatementType == DbStatementType.Delete ||
                         StatementType == DbStatementType.Update ||
                         StatementType == DbStatementType.StoredProcedure ||
                         StatementType == DbStatementType.Select))
                    {
                        // Grab rows affected
                        SendInfoSqlToBuffer(RowsAffectedInfoItems, IscCodes.ROWS_AFFECTED_BUFFER_SIZE);

                        _database.XdrStream.Flush();

                        //rows affected
                        numberOfResponses = 1;
                        try
                        {
                            numberOfResponses--;
                            GenericResponse rowsAffectedResponse = _database.ReadGenericResponse();
                            RecordsAffected = ProcessRecordsAffectedBuffer(ProcessInfoSqlResponse(rowsAffectedResponse));
                        }
                        finally
                        {
                            SafeFinishFetching(ref numberOfResponses);
                        }
                    }

                    _state = StatementState.Executed;
                }
                catch (IOException ex)
                {
                    _state = StatementState.Error;
                    throw IscException.ForErrorCode(IscCodes.isc_net_read_err, ex);
                }
            }
        }
示例#14
0
 public CrateDataReader(SqlResponse sqlResponse)
 {
     _sqlResponse = sqlResponse;
 }
示例#15
0
		protected void ProcessStoredProcedureExecuteResponse(SqlResponse response)
		{
			try
			{
				if (response.Count > 0)
				{
					this.outputParams.Enqueue(this.ReadDataRow());
				}
			}
			catch (IOException)
			{
				throw new IscException(IscCodes.isc_net_read_err);
			}
		}
示例#16
0
        public override async Task Execute(AsyncWrappingCommonArgs async)
        {
            EnsureNotDeallocated();

            Clear();

            try
            {
                RecordsAffected = -1;

                await SendExecuteToBuffer(async).ConfigureAwait(false);

                await _database.Xdr.Flush(async).ConfigureAwait(false);

                var numberOfResponses = (StatementType == DbStatementType.StoredProcedure ? 1 : 0) + 1;
                try
                {
                    SqlResponse sqlStoredProcedureResponse = null;
                    if (StatementType == DbStatementType.StoredProcedure)
                    {
                        numberOfResponses--;
                        sqlStoredProcedureResponse = (SqlResponse)await _database.ReadResponse(async).ConfigureAwait(false);
                        await ProcessStoredProcedureExecuteResponse(sqlStoredProcedureResponse, async).ConfigureAwait(false);
                    }

                    numberOfResponses--;
                    var executeResponse = (GenericResponse)await _database.ReadResponse(async).ConfigureAwait(false);
                    await ProcessExecuteResponse(executeResponse, async).ConfigureAwait(false);
                }
                finally
                {
                    numberOfResponses = await SafeFinishFetching(numberOfResponses, async).ConfigureAwait(false);
                }

                // we need to split this in two, to allow server handle op_cancel properly

                if (DoRecordsAffected)
                {
                    await SendInfoSqlToBuffer(RowsAffectedInfoItems, IscCodes.ROWS_AFFECTED_BUFFER_SIZE, async).ConfigureAwait(false);

                    await _database.Xdr.Flush(async).ConfigureAwait(false);

                    numberOfResponses = 1;
                    try
                    {
                        numberOfResponses--;
                        var rowsAffectedResponse = (GenericResponse)await _database.ReadResponse(async).ConfigureAwait(false);

                        RecordsAffected = ProcessRecordsAffectedBuffer(await ProcessInfoSqlResponse(rowsAffectedResponse, async).ConfigureAwait(false));
                    }
                    finally
                    {
                        numberOfResponses = await SafeFinishFetching(numberOfResponses, async).ConfigureAwait(false);
                    }
                }

                State = StatementState.Executed;
            }
            catch (IOException ex)
            {
                State = StatementState.Error;
                throw IscException.ForIOException(ex);
            }
        }
    public override void Execute(int timeout, IDescriptorFiller descriptorFiller)
    {
        EnsureNotDeallocated();

        Clear();

        try
        {
            RecordsAffected = -1;

            SendExecuteToBuffer(timeout, descriptorFiller);

            _database.Xdr.Flush();

            var numberOfResponses = (StatementType == DbStatementType.StoredProcedure ? 1 : 0) + 1;
            try
            {
                SqlResponse sqlStoredProcedureResponse = null;
                if (StatementType == DbStatementType.StoredProcedure)
                {
                    numberOfResponses--;
                    sqlStoredProcedureResponse = (SqlResponse)_database.ReadResponse();
                    ProcessStoredProcedureExecuteResponse(sqlStoredProcedureResponse);
                }

                numberOfResponses--;
                var executeResponse = (GenericResponse)_database.ReadResponse();
                ProcessExecuteResponse(executeResponse);
            }
            finally
            {
                (Database as GdsDatabase).SafeFinishFetching(numberOfResponses);
            }

            // we need to split this in two, to allow server handle op_cancel properly

            if (DoRecordsAffected)
            {
                SendInfoSqlToBuffer(RowsAffectedInfoItems, IscCodes.ROWS_AFFECTED_BUFFER_SIZE);

                _database.Xdr.Flush();

                numberOfResponses = 1;
                try
                {
                    numberOfResponses--;
                    var rowsAffectedResponse = (GenericResponse)_database.ReadResponse();
                    RecordsAffected = ProcessRecordsAffectedBuffer(ProcessInfoSqlResponse(rowsAffectedResponse));
                }
                finally
                {
                    (Database as GdsDatabase).SafeFinishFetching(numberOfResponses);
                }
            }

            State = StatementState.Executed;
        }
        catch (IOException ex)
        {
            State = StatementState.Error;
            throw IscException.ForIOException(ex);
        }
    }
        public override async Task Execute(AsyncWrappingCommonArgs async)
        {
            EnsureNotDeallocated();

            Clear();

            try
            {
                RecordsAffected = -1;

                await SendExecuteToBuffer(async).ConfigureAwait(false);

                var readRowsAffectedResponse = false;
                if (DoRecordsAffected)
                {
                    await SendInfoSqlToBuffer(RowsAffectedInfoItems, IscCodes.ROWS_AFFECTED_BUFFER_SIZE, async).ConfigureAwait(false);

                    readRowsAffectedResponse = true;
                }

                await _database.Xdr.Flush(async).ConfigureAwait(false);

                var numberOfResponses = (StatementType == DbStatementType.StoredProcedure ? 1 : 0) + 1 + (readRowsAffectedResponse ? 1 : 0);
                try
                {
                    SqlResponse sqlStoredProcedureResponse = null;
                    if (StatementType == DbStatementType.StoredProcedure)
                    {
                        numberOfResponses--;
                        sqlStoredProcedureResponse = (SqlResponse)await _database.ReadResponse(async).ConfigureAwait(false);
                        await ProcessStoredProcedureExecuteResponse(sqlStoredProcedureResponse, async).ConfigureAwait(false);
                    }

                    numberOfResponses--;
                    var executeResponse = (GenericResponse)await _database.ReadResponse(async).ConfigureAwait(false);

                    GenericResponse rowsAffectedResponse = null;
                    if (readRowsAffectedResponse)
                    {
                        numberOfResponses--;
                        rowsAffectedResponse = (GenericResponse)await _database.ReadResponse(async).ConfigureAwait(false);
                    }

                    await ProcessExecuteResponse(executeResponse, async).ConfigureAwait(false);

                    if (readRowsAffectedResponse)
                    {
                        RecordsAffected = ProcessRecordsAffectedBuffer(await ProcessInfoSqlResponse(rowsAffectedResponse, async).ConfigureAwait(false));
                    }
                }
                finally
                {
                    numberOfResponses = await SafeFinishFetching(numberOfResponses, async).ConfigureAwait(false);
                }

                State = StatementState.Executed;
            }
            catch (IOException ex)
            {
                State = StatementState.Error;
                throw IscException.ForErrorCode(IscCodes.isc_network_error, ex);
            }
        }
		protected void ProcessStoredProcedureExecuteResponse(SqlResponse response)
		{
			try
			{
				if (response.Count > 0)
				{
					_outputParams.Enqueue(ReadDataRow());
				}
			}
			catch (IOException ex)
			{
				throw IscException.ForErrorCode(IscCodes.isc_net_read_err, ex);
			}
		}
示例#20
0
        public override void Execute()
        {
            if (this.state == StatementState.Deallocated)
            {
                throw new InvalidOperationException("Statement is not correctly created.");
            }

            // Clear data
            this.Clear();

            lock (this.database.SyncObject)
            {
                try
                {
                    this.RecordsAffected = -1;

                    this.SendExecuteToBuffer();

                    bool readRowsAffectedResponse = false;
                    // Obtain records affected by query execution
                    if (this.ReturnRecordsAffected &&
                        (this.StatementType == DbStatementType.Insert ||
                         this.StatementType == DbStatementType.Delete ||
                         this.StatementType == DbStatementType.Update ||
                         this.StatementType == DbStatementType.StoredProcedure ||
                         this.StatementType == DbStatementType.Select))
                    {
                        // Grab rows affected
                        this.SendInfoSqlToBuffer(RowsAffectedInfoItems, IscCodes.ROWS_AFFECTED_BUFFER_SIZE);

                        readRowsAffectedResponse = true;
                    }

                    this.database.Flush();

                    // sql?, execute, rows affected?
                    int numberOfResponses =
                        (this.StatementType == DbStatementType.StoredProcedure ? 1 : 0) + 1 + (readRowsAffectedResponse ? 1 : 0);
                    try
                    {
                        SqlResponse sqlStoredProcedureResponse = null;
                        if (this.StatementType == DbStatementType.StoredProcedure)
                        {
                            numberOfResponses--;
                            sqlStoredProcedureResponse = this.database.ReadSqlResponse();
                            this.ProcessStoredProcedureExecuteResponse(sqlStoredProcedureResponse);
                        }

                        numberOfResponses--;
                        GenericResponse executeResponse = this.database.ReadGenericResponse();

                        GenericResponse rowsAffectedResponse = null;
                        if (readRowsAffectedResponse)
                        {
                            numberOfResponses--;
                            rowsAffectedResponse = this.database.ReadGenericResponse();
                        }

                        this.ProcessExecuteResponse(executeResponse);
                        if (readRowsAffectedResponse)
                        {
                            this.RecordsAffected = this.ProcessRecordsAffectedBuffer(this.ProcessInfoSqlResponse(rowsAffectedResponse));
                        }
                    }
                    finally
                    {
                        SafeFinishFetching(ref numberOfResponses);
                    }

                    this.state = StatementState.Executed;
                }
                catch (IOException)
                {
                    this.state = StatementState.Error;
                    throw new IscException(IscCodes.isc_net_read_err);
                }
            }
        }
示例#21
0
        public override async ValueTask ExecuteAsync(CancellationToken cancellationToken = default)
        {
            EnsureNotDeallocated();

            Clear();

            try
            {
                RecordsAffected = -1;

                await SendExecuteToBufferAsync(cancellationToken).ConfigureAwait(false);

                var readRowsAffectedResponse = false;
                if (DoRecordsAffected)
                {
                    await SendInfoSqlToBufferAsync(RowsAffectedInfoItems, IscCodes.ROWS_AFFECTED_BUFFER_SIZE, cancellationToken).ConfigureAwait(false);

                    readRowsAffectedResponse = true;
                }

                await _database.Xdr.FlushAsync(cancellationToken).ConfigureAwait(false);

                var numberOfResponses = (StatementType == DbStatementType.StoredProcedure ? 1 : 0) + 1 + (readRowsAffectedResponse ? 1 : 0);
                try
                {
                    SqlResponse sqlStoredProcedureResponse = null;
                    if (StatementType == DbStatementType.StoredProcedure)
                    {
                        numberOfResponses--;
                        sqlStoredProcedureResponse = (SqlResponse)await _database.ReadResponseAsync(cancellationToken).ConfigureAwait(false);
                        await ProcessStoredProcedureExecuteResponseAsync(sqlStoredProcedureResponse, cancellationToken).ConfigureAwait(false);
                    }

                    numberOfResponses--;
                    var executeResponse = (GenericResponse)await _database.ReadResponseAsync(cancellationToken).ConfigureAwait(false);

                    GenericResponse rowsAffectedResponse = null;
                    if (readRowsAffectedResponse)
                    {
                        numberOfResponses--;
                        rowsAffectedResponse = (GenericResponse)await _database.ReadResponseAsync(cancellationToken).ConfigureAwait(false);
                    }

                    await ProcessExecuteResponseAsync(executeResponse, cancellationToken).ConfigureAwait(false);

                    if (readRowsAffectedResponse)
                    {
                        RecordsAffected = ProcessRecordsAffectedBuffer(await ProcessInfoSqlResponseAsync(rowsAffectedResponse, cancellationToken).ConfigureAwait(false));
                    }
                }
                finally
                {
                    numberOfResponses = await SafeFinishFetchingAsync(numberOfResponses, cancellationToken).ConfigureAwait(false);
                }

                State = StatementState.Executed;
            }
            catch (IOException ex)
            {
                State = StatementState.Error;
                throw IscException.ForIOException(ex);
            }
        }
示例#22
0
        public override void Execute()
        {
            EnsureNotDeallocated();

            Clear();

            try
            {
                RecordsAffected = -1;

                SendExecuteToBuffer();

                var readRowsAffectedResponse = false;
                if (DoRecordsAffected)
                {
                    SendInfoSqlToBuffer(RowsAffectedInfoItems, IscCodes.ROWS_AFFECTED_BUFFER_SIZE);

                    readRowsAffectedResponse = true;
                }

                _database.Xdr.Flush();

                var numberOfResponses = (StatementType == DbStatementType.StoredProcedure ? 1 : 0) + 1 + (readRowsAffectedResponse ? 1 : 0);
                try
                {
                    SqlResponse sqlStoredProcedureResponse = null;
                    if (StatementType == DbStatementType.StoredProcedure)
                    {
                        numberOfResponses--;
                        sqlStoredProcedureResponse = (SqlResponse)_database.ReadResponse();
                        ProcessStoredProcedureExecuteResponse(sqlStoredProcedureResponse);
                    }

                    numberOfResponses--;
                    var executeResponse = (GenericResponse)_database.ReadResponse();

                    GenericResponse rowsAffectedResponse = null;
                    if (readRowsAffectedResponse)
                    {
                        numberOfResponses--;
                        rowsAffectedResponse = (GenericResponse)_database.ReadResponse();
                    }

                    ProcessExecuteResponse(executeResponse);
                    if (readRowsAffectedResponse)
                    {
                        RecordsAffected = ProcessRecordsAffectedBuffer(ProcessInfoSqlResponse(rowsAffectedResponse));
                    }
                }
                finally
                {
                    numberOfResponses = SafeFinishFetching(numberOfResponses);
                }

                State = StatementState.Executed;
            }
            catch (IOException ex)
            {
                State = StatementState.Error;
                throw IscException.ForIOException(ex);
            }
        }