本文整理汇总了C#中Microsoft.SqlServer.Server.SqlDataRecord.InternalGetSmiMetaData方法的典型用法代码示例。如果您正苦于以下问题:C# SqlDataRecord.InternalGetSmiMetaData方法的具体用法?C# SqlDataRecord.InternalGetSmiMetaData怎么用?C# SqlDataRecord.InternalGetSmiMetaData使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Microsoft.SqlServer.Server.SqlDataRecord
的用法示例。
在下文中一共展示了SqlDataRecord.InternalGetSmiMetaData方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: SendResultsStart
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!");
}
}
示例2: SendResultsRow
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!");
}
}
示例3: Send
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!");
}
}