public void SendResultsStart(SqlDataRecord record) { ADP.CheckArgumentNull(record, "record"); SetPipeBusy( ); try { EnsureNormalSendValid("SendResultsStart"); SmiRecordBuffer recordBuffer = record.RecordBuffer; if (record.RecordContext == _smiContext) { recordBuffer = record.RecordBuffer; } else { recordBuffer = _smiContext.CreateRecordBuffer(record.InternalGetSmiMetaData(), _eventSink); // Only MetaData needed for sending start } _smiContext.SendResultsStartToPipe(recordBuffer, _eventSink); // Handle any errors that are reported. _eventSink.ProcessMessagesAndThrow(); // remember sent buffer info so it can be used in send row/end. _recordBufferSent = recordBuffer; _metaDataSent = record.InternalGetMetaData(); } catch { _eventSink.CleanMessages(); throw; } finally { ClearPipeBusy( ); Debug.Assert(_eventSink.HasMessages == false, "There should be no messages left in _eventsink at the end of the SendResultsStart!"); } }
public void SendResultsStart(SqlDataRecord record) { ADP.CheckArgumentNull(record, "record"); this.SetPipeBusy(); try { this.EnsureNormalSendValid("SendResultsStart"); SmiRecordBuffer recordBuffer = record.RecordBuffer; if (record.RecordContext == this._smiContext) { recordBuffer = record.RecordBuffer; } else { recordBuffer = this._smiContext.CreateRecordBuffer(record.InternalGetSmiMetaData(), this._eventSink); } this._smiContext.SendResultsStartToPipe(recordBuffer, this._eventSink); this._eventSink.ProcessMessagesAndThrow(); this._recordBufferSent = recordBuffer; this._metaDataSent = record.InternalGetMetaData(); } finally { this.ClearPipeBusy(); } }
public void Send(SqlDataRecord record) { ADP.CheckArgumentNull(record, "record"); SetPipeBusy( ); try { EnsureNormalSendValid("Send"); if (0 != record.FieldCount) // SQLBUDT #340564 -- don't send empty records. { SmiRecordBuffer recordBuffer; if (record.RecordContext == _smiContext) { recordBuffer = record.RecordBuffer; } else // SendResultsRowToPipe() only takes a RecordBuffer created by an SmiContext { SmiExtendedMetaData[] columnMetaData = record.InternalGetSmiMetaData(); recordBuffer = _smiContext.CreateRecordBuffer(columnMetaData, _eventSink); if (SmiContextFactory.Instance.NegotiatedSmiVersion >= SmiContextFactory.KatmaiVersion) { ValueUtilsSmi.FillCompatibleSettersFromRecord(_eventSink, recordBuffer, columnMetaData, record, null /* no default values */); } else { ValueUtilsSmi.FillCompatibleITypedSettersFromRecord(_eventSink, recordBuffer, columnMetaData, record); } } _smiContext.SendResultsStartToPipe(recordBuffer, _eventSink); _eventSink.ProcessMessagesAndThrow(); // Handle any errors that are reported. // If SendResultsStartToPipe succeeded, then SendResultsEndToPipe must be called. try { _smiContext.SendResultsRowToPipe(recordBuffer, _eventSink); _eventSink.ProcessMessagesAndThrow(); // Handle any errors that are reported. } finally { _smiContext.SendResultsEndToPipe(recordBuffer, _eventSink); _eventSink.ProcessMessagesAndThrow(); // Handle any errors that are reported. } } } catch { // VSDD 479525: if exception happens (e.g. SendResultsStartToPipe throw OutOfMemory), _eventSink may not be empty, // which will affect server's behavior if the next call successes (previous exception is still in the eventSink, // will be throwed). So we need to clean _eventSink. _eventSink.CleanMessages(); throw; } finally { ClearPipeBusy( ); Debug.Assert(_eventSink.HasMessages == false, "There should be no messages left in _eventsink at the end of the Send record!"); } }
public void SendResultsRow(SqlDataRecord record) { ADP.CheckArgumentNull(record, "record"); SetPipeBusy( ); try { EnsureResultStarted("SendResultsRow"); if (_hadErrorInResultSet) { throw SQL.SqlPipeErrorRequiresSendEnd(); } // Assume error state unless cleared below _hadErrorInResultSet = true; SmiRecordBuffer recordBuffer; if (record.RecordContext == _smiContext) { recordBuffer = record.RecordBuffer; } else { SmiExtendedMetaData[] columnMetaData = record.InternalGetSmiMetaData(); recordBuffer = _smiContext.CreateRecordBuffer(columnMetaData, _eventSink); if (SmiContextFactory.Instance.NegotiatedSmiVersion >= SmiContextFactory.KatmaiVersion) { ValueUtilsSmi.FillCompatibleSettersFromRecord(_eventSink, recordBuffer, columnMetaData, record, null /* no default values */); } else { ValueUtilsSmi.FillCompatibleITypedSettersFromRecord(_eventSink, recordBuffer, columnMetaData, record); } } _smiContext.SendResultsRowToPipe(recordBuffer, _eventSink); // Handle any errors that are reported. _eventSink.ProcessMessagesAndThrow(); // We successfully traversed the send, clear error state _hadErrorInResultSet = false; } catch { _eventSink.CleanMessages(); throw; } finally { ClearPipeBusy( ); Debug.Assert(_eventSink.HasMessages == false, "There should be no messages left in _eventsink at the end of the SendResultsRow!"); } }
public void Send(SqlDataRecord record) { ADP.CheckArgumentNull(record, "record"); this.SetPipeBusy(); try { this.EnsureNormalSendValid("Send"); if (record.FieldCount != 0) { SmiRecordBuffer recordBuffer; if (record.RecordContext == this._smiContext) { recordBuffer = record.RecordBuffer; } else { SmiExtendedMetaData[] smiMetaData = record.InternalGetSmiMetaData(); recordBuffer = this._smiContext.CreateRecordBuffer(smiMetaData, this._eventSink); if (SmiContextFactory.Instance.NegotiatedSmiVersion >= 210L) { ValueUtilsSmi.FillCompatibleSettersFromRecord(this._eventSink, recordBuffer, smiMetaData, record, null); } else { ValueUtilsSmi.FillCompatibleITypedSettersFromRecord(this._eventSink, recordBuffer, smiMetaData, record); } } this._smiContext.SendResultsStartToPipe(recordBuffer, this._eventSink); this._eventSink.ProcessMessagesAndThrow(); try { this._smiContext.SendResultsRowToPipe(recordBuffer, this._eventSink); this._eventSink.ProcessMessagesAndThrow(); } finally { this._smiContext.SendResultsEndToPipe(recordBuffer, this._eventSink); this._eventSink.ProcessMessagesAndThrow(); } } } finally { this.ClearPipeBusy(); } }
public void SendResultsRow(SqlDataRecord record) { ADP.CheckArgumentNull(record, "record"); this.SetPipeBusy(); try { SmiRecordBuffer recordBuffer; this.EnsureResultStarted("SendResultsRow"); if (this._hadErrorInResultSet) { throw SQL.SqlPipeErrorRequiresSendEnd(); } this._hadErrorInResultSet = true; if (record.RecordContext == this._smiContext) { recordBuffer = record.RecordBuffer; } else { SmiExtendedMetaData[] smiMetaData = record.InternalGetSmiMetaData(); recordBuffer = this._smiContext.CreateRecordBuffer(smiMetaData, this._eventSink); if (SmiContextFactory.Instance.NegotiatedSmiVersion >= 210L) { ValueUtilsSmi.FillCompatibleSettersFromRecord(this._eventSink, recordBuffer, smiMetaData, record, null); } else { ValueUtilsSmi.FillCompatibleITypedSettersFromRecord(this._eventSink, recordBuffer, smiMetaData, record); } } this._smiContext.SendResultsRowToPipe(recordBuffer, this._eventSink); this._eventSink.ProcessMessagesAndThrow(); this._hadErrorInResultSet = false; } finally { this.ClearPipeBusy(); } }
public void SendResultsRow( SqlDataRecord record ) { ADP.CheckArgumentNull(record, "record"); SetPipeBusy( ); try { EnsureResultStarted( "SendResultsRow" ); if ( _hadErrorInResultSet ) { throw SQL.SqlPipeErrorRequiresSendEnd(); } // Assume error state unless cleared below _hadErrorInResultSet = true; SmiRecordBuffer recordBuffer; if (record.RecordContext == _smiContext) { recordBuffer = record.RecordBuffer; } else { SmiExtendedMetaData[] columnMetaData = record.InternalGetSmiMetaData(); recordBuffer = _smiContext.CreateRecordBuffer(columnMetaData, _eventSink); if (SmiContextFactory.Instance.NegotiatedSmiVersion >= SmiContextFactory.KatmaiVersion) { ValueUtilsSmi.FillCompatibleSettersFromRecord(_eventSink, recordBuffer, columnMetaData, record, null /* no default values */); } else { ValueUtilsSmi.FillCompatibleITypedSettersFromRecord(_eventSink, recordBuffer, columnMetaData, record); } } _smiContext.SendResultsRowToPipe( recordBuffer, _eventSink ); // Handle any errors that are reported. _eventSink.ProcessMessagesAndThrow(); // We successfully traversed the send, clear error state _hadErrorInResultSet = false; } catch { _eventSink.CleanMessages(); throw; } finally { ClearPipeBusy( ); Debug.Assert(_eventSink.HasMessages == false, "There should be no messages left in _eventsink at the end of the SendResultsRow!"); } }
public void SendResultsStart( SqlDataRecord record ) { ADP.CheckArgumentNull(record, "record"); SetPipeBusy( ); try { EnsureNormalSendValid( "SendResultsStart" ); SmiRecordBuffer recordBuffer = record.RecordBuffer; if (record.RecordContext == _smiContext) { recordBuffer = record.RecordBuffer; } else { recordBuffer = _smiContext.CreateRecordBuffer(record.InternalGetSmiMetaData(), _eventSink); // Only MetaData needed for sending start } _smiContext.SendResultsStartToPipe( recordBuffer, _eventSink ); // Handle any errors that are reported. _eventSink.ProcessMessagesAndThrow(); // remember sent buffer info so it can be used in send row/end. _recordBufferSent = recordBuffer; _metaDataSent = record.InternalGetMetaData(); } catch { _eventSink.CleanMessages(); throw; } finally { ClearPipeBusy( ); Debug.Assert(_eventSink.HasMessages == false, "There should be no messages left in _eventsink at the end of the SendResultsStart!"); } }
public void Send( SqlDataRecord record ) { ADP.CheckArgumentNull(record, "record"); SetPipeBusy( ); try { EnsureNormalSendValid( "Send" ); if (0 != record.FieldCount) { // SQLBUDT #340564 -- don't send empty records. SmiRecordBuffer recordBuffer; if (record.RecordContext == _smiContext) { recordBuffer = record.RecordBuffer; } else { // SendResultsRowToPipe() only takes a RecordBuffer created by an SmiContext SmiExtendedMetaData[] columnMetaData = record.InternalGetSmiMetaData(); recordBuffer = _smiContext.CreateRecordBuffer(columnMetaData, _eventSink); if (SmiContextFactory.Instance.NegotiatedSmiVersion >= SmiContextFactory.KatmaiVersion) { ValueUtilsSmi.FillCompatibleSettersFromRecord(_eventSink, recordBuffer, columnMetaData, record, null /* no default values */); } else { ValueUtilsSmi.FillCompatibleITypedSettersFromRecord(_eventSink, recordBuffer, columnMetaData, record); } } _smiContext.SendResultsStartToPipe( recordBuffer, _eventSink ); _eventSink.ProcessMessagesAndThrow(); // Handle any errors that are reported. // If SendResultsStartToPipe succeeded, then SendResultsEndToPipe must be called. try { _smiContext.SendResultsRowToPipe( recordBuffer, _eventSink ); _eventSink.ProcessMessagesAndThrow(); // Handle any errors that are reported. } finally { _smiContext.SendResultsEndToPipe( recordBuffer, _eventSink ); _eventSink.ProcessMessagesAndThrow(); // Handle any errors that are reported. } } } catch { // VSDD 479525: if exception happens (e.g. SendResultsStartToPipe throw OutOfMemory), _eventSink may not be empty, // which will affect server's behavior if the next call successes (previous exception is still in the eventSink, // will be throwed). So we need to clean _eventSink. _eventSink.CleanMessages(); throw; } finally { ClearPipeBusy( ); Debug.Assert(_eventSink.HasMessages == false, "There should be no messages left in _eventsink at the end of the Send record!"); } }