Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Data / Microsoft / SqlServer / Server / SqlDataRecord.cs / 5 / SqlDataRecord.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
// [....]
// [....]
// [....]
//-----------------------------------------------------------------------------
namespace Microsoft.SqlServer.Server {
using System;
using System.Data;
using System.Data.Common;
using System.Data.ProviderBase;
using System.Data.Sql;
using System.Data.SqlTypes;
using System.Data.SqlClient;
using System.Diagnostics;
#if WINFSInternalOnly
internal
#else
public
#endif
class SqlDataRecord : IDataRecord {
SmiRecordBuffer _recordBuffer;
SmiContext _recordContext;
SmiExtendedMetaData[] _columnSmiMetaData;
SmiEventSink_Default _eventSink;
SqlMetaData[] _columnMetaData;
FieldNameLookup _fieldNameLookup;
bool _usesStringStorageForXml;
static readonly SmiMetaData __maxNVarCharForXml = new SmiMetaData(SqlDbType.NVarChar, SmiMetaData.UnlimitedMaxLengthIndicator,
SmiMetaData.DefaultNVarChar_NoCollation.Precision,
SmiMetaData.DefaultNVarChar_NoCollation.Scale,
SmiMetaData.DefaultNVarChar.LocaleId,
SmiMetaData.DefaultNVarChar.CompareOptions,
null);
public virtual int FieldCount {
get {
EnsureSubclassOverride();
return _columnMetaData.Length;
}
}
public virtual String GetName( int ordinal ) {
EnsureSubclassOverride();
return GetSqlMetaData(ordinal).Name;
}
public virtual String GetDataTypeName( int ordinal ) {
EnsureSubclassOverride();
SqlMetaData metaData = GetSqlMetaData(ordinal);
if ( SqlDbType.Udt == metaData.SqlDbType ) {
return metaData.UdtTypeName;
}
else {
return MetaType.GetMetaTypeFromSqlDbType(metaData.SqlDbType, false).TypeName;
}
}
public virtual Type GetFieldType( int ordinal ) {
EnsureSubclassOverride();
if (SqlDbType.Udt == GetSqlMetaData(ordinal).SqlDbType) {
return GetSqlMetaData( ordinal ).Type;
}
else {
SqlMetaData md = GetSqlMetaData(ordinal);
return MetaType.GetMetaTypeFromSqlDbType(md.SqlDbType, false).ClassType;
}
}
public virtual Object GetValue(int ordinal) {
EnsureSubclassOverride();
SmiMetaData metaData = GetSmiMetaData(ordinal);
if (SmiVersion >= SmiContextFactory.KatmaiVersion) {
return ValueUtilsSmi.GetValue200(
_eventSink,
_recordBuffer,
ordinal,
metaData,
_recordContext
);
}
else {
return ValueUtilsSmi.GetValue(
_eventSink,
(ITypedGettersV3)_recordBuffer,
ordinal,
metaData,
_recordContext
);
}
}
public virtual int GetValues( object[] values ) {
EnsureSubclassOverride();
if (null == values) {
throw ADP.ArgumentNull("values");
}
int copyLength = ( values.Length < FieldCount ) ? values.Length : FieldCount;
for(int i=0; i= SmiContextFactory.KatmaiVersion) {
return ValueUtilsSmi.GetSqlValue200(_eventSink, _recordBuffer, ordinal, metaData, _recordContext);
}
return ValueUtilsSmi.GetSqlValue( _eventSink, _recordBuffer, ordinal, metaData, _recordContext );
}
public virtual int GetSqlValues(object[] values) {
EnsureSubclassOverride();
if (null == values) {
throw ADP.ArgumentNull("values");
}
int copyLength = (values.Length < FieldCount) ? values.Length : FieldCount;
for(int i=0; i FieldCount ) ? FieldCount : values.Length;
ExtendedClrTypeCode[] typeCodes = new ExtendedClrTypeCode [copyLength];
// Verify all data values as acceptable before changing current state.
for (int i=0; i < copyLength; i++) {
SqlMetaData metaData = GetSqlMetaData(i);
typeCodes[i] = MetaDataUtilsSmi.DetermineExtendedTypeCodeForUseWithSqlDbType(
metaData.SqlDbType, false /* isMultiValued */, values[i], metaData.Type, SmiVersion);
if ( ExtendedClrTypeCode.Invalid == typeCodes[i] ) {
throw ADP.InvalidCast();
}
}
// Now move the data (it'll only throw if someone plays with the values array between
// the validation loop and here, or if an invalid UDT was sent).
for( int i=0; i < copyLength; i++ ) {
if (SmiVersion >= SmiContextFactory.KatmaiVersion) {
ValueUtilsSmi.SetCompatibleValueV200(_eventSink, _recordBuffer, i, GetSmiMetaData(i), values[i], typeCodes[i], 0, 0, null);
}
else {
ValueUtilsSmi.SetCompatibleValue(_eventSink, _recordBuffer, i, GetSmiMetaData(i), values[i], typeCodes[i], 0);
}
}
return copyLength;
}
public virtual void SetValue( int ordinal, object value ) {
EnsureSubclassOverride();
SqlMetaData metaData = GetSqlMetaData(ordinal);
ExtendedClrTypeCode typeCode = MetaDataUtilsSmi.DetermineExtendedTypeCodeForUseWithSqlDbType(
metaData.SqlDbType, false /* isMultiValued */, value, metaData.Type, SmiVersion);
if ( ExtendedClrTypeCode.Invalid == typeCode ) {
throw ADP.InvalidCast();
}
if (SmiVersion >= SmiContextFactory.KatmaiVersion) {
ValueUtilsSmi.SetCompatibleValueV200(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value, typeCode, 0, 0, null);
}
else {
ValueUtilsSmi.SetCompatibleValue(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value, typeCode, 0);
}
}
public virtual void SetBoolean(int ordinal, bool value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetBoolean(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetByte(int ordinal, byte value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetByte(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetBytes(int ordinal, long fieldOffset, byte[] buffer, int bufferOffset, int length) {
EnsureSubclassOverride();
ValueUtilsSmi.SetBytes(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), fieldOffset, buffer, bufferOffset, length);
}
public virtual void SetChar(int ordinal, char value) {
EnsureSubclassOverride();
throw ADP.NotSupported();
}
public virtual void SetChars(int ordinal, long fieldOffset, char[] buffer, int bufferOffset, int length) {
EnsureSubclassOverride();
ValueUtilsSmi.SetChars(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), fieldOffset, buffer, bufferOffset, length);
}
public virtual void SetInt16(int ordinal, System.Int16 value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetInt16(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetInt32(int ordinal, System.Int32 value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetInt32(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetInt64(int ordinal, System.Int64 value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetInt64(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetFloat(int ordinal, float value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSingle(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetDouble(int ordinal, double value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetDouble(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetString(int ordinal, string value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetString(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetDecimal(int ordinal, Decimal value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetDecimal(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetDateTime(int ordinal, DateTime value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetDateTime(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetTimeSpan(int ordinal, TimeSpan value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetTimeSpan(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value, SmiVersion >= SmiContextFactory.KatmaiVersion);
}
public virtual void SetDateTimeOffset(int ordinal, DateTimeOffset value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetDateTimeOffset(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value, SmiVersion >= SmiContextFactory.KatmaiVersion);
}
public virtual void SetDBNull(int ordinal) {
EnsureSubclassOverride();
ValueUtilsSmi.SetDBNull(_eventSink, _recordBuffer, ordinal, true);
}
public virtual void SetGuid(int ordinal, Guid value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetGuid(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlBoolean(int ordinal, SqlBoolean value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlBoolean(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlByte(int ordinal, SqlByte value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlByte(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlInt16(int ordinal, SqlInt16 value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlInt16(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlInt32(int ordinal, SqlInt32 value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlInt32(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlInt64(int ordinal, SqlInt64 value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlInt64(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlSingle(int ordinal, SqlSingle value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlSingle(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlDouble(int ordinal, SqlDouble value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlDouble(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlMoney(int ordinal, SqlMoney value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlMoney(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlDateTime(int ordinal, SqlDateTime value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlDateTime(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
#if WINFS_UTC
public virtual void SetSqlUtcDateTime(int ordinal, SqlUtcDateTime value) {
ValueUtilsSmi.SetSqlUtcDateTime( _eventSink, _recordBuffer, ordinal, GetSmiMetaData( ordinal ), value );
}
public virtual void SetSqlDate(int ordinal, SqlDate value) {
ValueUtilsSmi.SetSqlDate( _eventSink, _recordBuffer, ordinal, GetSmiMetaData( ordinal ), value );
}
public virtual void SetSqlTime(int ordinal, SqlTime value) {
ValueUtilsSmi.SetSqlTime( _eventSink, _recordBuffer, ordinal, GetSmiMetaData( ordinal ), value );
}
#endif
public virtual void SetSqlXml(int ordinal, SqlXml value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlXml(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlDecimal(int ordinal, SqlDecimal value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlDecimal(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlString(int ordinal, SqlString value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlString(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlBinary(int ordinal, SqlBinary value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlBinary(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlGuid(int ordinal, SqlGuid value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlGuid(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlChars(int ordinal, SqlChars value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlChars(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlBytes(int ordinal, SqlBytes value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlBytes(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
//
// SqlDataRecord public API
//
public SqlDataRecord( params SqlMetaData[] metaData ) {
// Initial consistency check
if ( null == metaData ) {
throw ADP.ArgumentNull( "metadata" );
}
_columnMetaData = new SqlMetaData[metaData.Length];
_columnSmiMetaData = new SmiExtendedMetaData[metaData.Length];
ulong smiVersion = SmiVersion;
for (int i = 0; i < _columnSmiMetaData.Length; i++) {
_columnMetaData[i] = metaData[i];
_columnSmiMetaData[i] = MetaDataUtilsSmi.SqlMetaDataToSmiExtendedMetaData( _columnMetaData[i] );
if (!MetaDataUtilsSmi.IsValidForSmiVersion(_columnSmiMetaData[i], smiVersion)) {
throw ADP.VersionDoesNotSupportDataType(_columnSmiMetaData[i].TypeName);
}
}
_eventSink = new SmiEventSink_Default( );
if (InOutOfProcHelper.InProc) {
_recordContext = SmiContextFactory.Instance.GetCurrentContext();
_recordBuffer = _recordContext.CreateRecordBuffer( _columnSmiMetaData, _eventSink );
_usesStringStorageForXml = false;
}
else {
_recordContext = null;
_recordBuffer = new MemoryRecordBuffer(_columnSmiMetaData);
_usesStringStorageForXml = true;
}
_eventSink.ProcessMessagesAndThrow();
}
internal SqlDataRecord( SmiRecordBuffer recordBuffer, params SmiExtendedMetaData[] metaData ) {
Debug.Assert(null != recordBuffer, "invalid attempt to instantiate SqlDataRecord with null SmiRecordBuffer");
Debug.Assert(null != metaData, "invalid attempt to instantiate SqlDataRecord with null SmiExtendedMetaData[]");
_columnMetaData = new SqlMetaData[metaData.Length];
_columnSmiMetaData = new SmiExtendedMetaData[metaData.Length];
for (int i = 0; i < _columnSmiMetaData.Length; i++) {
_columnSmiMetaData[i] = metaData[i];
_columnMetaData[i] = MetaDataUtilsSmi.SmiExtendedMetaDataToSqlMetaData( _columnSmiMetaData[i] );
}
_eventSink = new SmiEventSink_Default( );
if (InOutOfProcHelper.InProc) {
_recordContext = SmiContextFactory.Instance.GetCurrentContext();
}
else {
_recordContext = null;
}
_recordBuffer = recordBuffer;
_eventSink.ProcessMessagesAndThrow();
}
//
// SqlDataRecord private members
//
internal SmiRecordBuffer RecordBuffer { // used by SqlPipe
get {
return _recordBuffer;
}
}
internal SmiContext RecordContext {
get {
return _recordContext;
}
}
private ulong SmiVersion {
get {
return InOutOfProcHelper.InProc ? SmiContextFactory.Instance.NegotiatedSmiVersion : SmiContextFactory.LatestVersion;
}
}
internal SqlMetaData[] InternalGetMetaData() {
return _columnMetaData;
}
internal SmiExtendedMetaData[] InternalGetSmiMetaData() {
return _columnSmiMetaData;
}
internal SmiExtendedMetaData GetSmiMetaData( int ordinal ) {
return _columnSmiMetaData[ordinal];
}
internal void ThrowIfInvalidOrdinal( int ordinal ) {
if ( 0 > ordinal || FieldCount <= ordinal ) {
throw ADP.IndexOutOfRange( ordinal );
}
}
private void EnsureSubclassOverride() {
if (null == _recordBuffer) {
throw SQL.SubclassMustOverride();
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
// [....]
// [....]
// [....]
//-----------------------------------------------------------------------------
namespace Microsoft.SqlServer.Server {
using System;
using System.Data;
using System.Data.Common;
using System.Data.ProviderBase;
using System.Data.Sql;
using System.Data.SqlTypes;
using System.Data.SqlClient;
using System.Diagnostics;
#if WINFSInternalOnly
internal
#else
public
#endif
class SqlDataRecord : IDataRecord {
SmiRecordBuffer _recordBuffer;
SmiContext _recordContext;
SmiExtendedMetaData[] _columnSmiMetaData;
SmiEventSink_Default _eventSink;
SqlMetaData[] _columnMetaData;
FieldNameLookup _fieldNameLookup;
bool _usesStringStorageForXml;
static readonly SmiMetaData __maxNVarCharForXml = new SmiMetaData(SqlDbType.NVarChar, SmiMetaData.UnlimitedMaxLengthIndicator,
SmiMetaData.DefaultNVarChar_NoCollation.Precision,
SmiMetaData.DefaultNVarChar_NoCollation.Scale,
SmiMetaData.DefaultNVarChar.LocaleId,
SmiMetaData.DefaultNVarChar.CompareOptions,
null);
public virtual int FieldCount {
get {
EnsureSubclassOverride();
return _columnMetaData.Length;
}
}
public virtual String GetName( int ordinal ) {
EnsureSubclassOverride();
return GetSqlMetaData(ordinal).Name;
}
public virtual String GetDataTypeName( int ordinal ) {
EnsureSubclassOverride();
SqlMetaData metaData = GetSqlMetaData(ordinal);
if ( SqlDbType.Udt == metaData.SqlDbType ) {
return metaData.UdtTypeName;
}
else {
return MetaType.GetMetaTypeFromSqlDbType(metaData.SqlDbType, false).TypeName;
}
}
public virtual Type GetFieldType( int ordinal ) {
EnsureSubclassOverride();
if (SqlDbType.Udt == GetSqlMetaData(ordinal).SqlDbType) {
return GetSqlMetaData( ordinal ).Type;
}
else {
SqlMetaData md = GetSqlMetaData(ordinal);
return MetaType.GetMetaTypeFromSqlDbType(md.SqlDbType, false).ClassType;
}
}
public virtual Object GetValue(int ordinal) {
EnsureSubclassOverride();
SmiMetaData metaData = GetSmiMetaData(ordinal);
if (SmiVersion >= SmiContextFactory.KatmaiVersion) {
return ValueUtilsSmi.GetValue200(
_eventSink,
_recordBuffer,
ordinal,
metaData,
_recordContext
);
}
else {
return ValueUtilsSmi.GetValue(
_eventSink,
(ITypedGettersV3)_recordBuffer,
ordinal,
metaData,
_recordContext
);
}
}
public virtual int GetValues( object[] values ) {
EnsureSubclassOverride();
if (null == values) {
throw ADP.ArgumentNull("values");
}
int copyLength = ( values.Length < FieldCount ) ? values.Length : FieldCount;
for(int i=0; i= SmiContextFactory.KatmaiVersion) {
return ValueUtilsSmi.GetSqlValue200(_eventSink, _recordBuffer, ordinal, metaData, _recordContext);
}
return ValueUtilsSmi.GetSqlValue( _eventSink, _recordBuffer, ordinal, metaData, _recordContext );
}
public virtual int GetSqlValues(object[] values) {
EnsureSubclassOverride();
if (null == values) {
throw ADP.ArgumentNull("values");
}
int copyLength = (values.Length < FieldCount) ? values.Length : FieldCount;
for(int i=0; i FieldCount ) ? FieldCount : values.Length;
ExtendedClrTypeCode[] typeCodes = new ExtendedClrTypeCode [copyLength];
// Verify all data values as acceptable before changing current state.
for (int i=0; i < copyLength; i++) {
SqlMetaData metaData = GetSqlMetaData(i);
typeCodes[i] = MetaDataUtilsSmi.DetermineExtendedTypeCodeForUseWithSqlDbType(
metaData.SqlDbType, false /* isMultiValued */, values[i], metaData.Type, SmiVersion);
if ( ExtendedClrTypeCode.Invalid == typeCodes[i] ) {
throw ADP.InvalidCast();
}
}
// Now move the data (it'll only throw if someone plays with the values array between
// the validation loop and here, or if an invalid UDT was sent).
for( int i=0; i < copyLength; i++ ) {
if (SmiVersion >= SmiContextFactory.KatmaiVersion) {
ValueUtilsSmi.SetCompatibleValueV200(_eventSink, _recordBuffer, i, GetSmiMetaData(i), values[i], typeCodes[i], 0, 0, null);
}
else {
ValueUtilsSmi.SetCompatibleValue(_eventSink, _recordBuffer, i, GetSmiMetaData(i), values[i], typeCodes[i], 0);
}
}
return copyLength;
}
public virtual void SetValue( int ordinal, object value ) {
EnsureSubclassOverride();
SqlMetaData metaData = GetSqlMetaData(ordinal);
ExtendedClrTypeCode typeCode = MetaDataUtilsSmi.DetermineExtendedTypeCodeForUseWithSqlDbType(
metaData.SqlDbType, false /* isMultiValued */, value, metaData.Type, SmiVersion);
if ( ExtendedClrTypeCode.Invalid == typeCode ) {
throw ADP.InvalidCast();
}
if (SmiVersion >= SmiContextFactory.KatmaiVersion) {
ValueUtilsSmi.SetCompatibleValueV200(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value, typeCode, 0, 0, null);
}
else {
ValueUtilsSmi.SetCompatibleValue(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value, typeCode, 0);
}
}
public virtual void SetBoolean(int ordinal, bool value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetBoolean(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetByte(int ordinal, byte value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetByte(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetBytes(int ordinal, long fieldOffset, byte[] buffer, int bufferOffset, int length) {
EnsureSubclassOverride();
ValueUtilsSmi.SetBytes(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), fieldOffset, buffer, bufferOffset, length);
}
public virtual void SetChar(int ordinal, char value) {
EnsureSubclassOverride();
throw ADP.NotSupported();
}
public virtual void SetChars(int ordinal, long fieldOffset, char[] buffer, int bufferOffset, int length) {
EnsureSubclassOverride();
ValueUtilsSmi.SetChars(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), fieldOffset, buffer, bufferOffset, length);
}
public virtual void SetInt16(int ordinal, System.Int16 value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetInt16(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetInt32(int ordinal, System.Int32 value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetInt32(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetInt64(int ordinal, System.Int64 value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetInt64(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetFloat(int ordinal, float value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSingle(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetDouble(int ordinal, double value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetDouble(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetString(int ordinal, string value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetString(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetDecimal(int ordinal, Decimal value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetDecimal(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetDateTime(int ordinal, DateTime value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetDateTime(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetTimeSpan(int ordinal, TimeSpan value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetTimeSpan(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value, SmiVersion >= SmiContextFactory.KatmaiVersion);
}
public virtual void SetDateTimeOffset(int ordinal, DateTimeOffset value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetDateTimeOffset(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value, SmiVersion >= SmiContextFactory.KatmaiVersion);
}
public virtual void SetDBNull(int ordinal) {
EnsureSubclassOverride();
ValueUtilsSmi.SetDBNull(_eventSink, _recordBuffer, ordinal, true);
}
public virtual void SetGuid(int ordinal, Guid value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetGuid(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlBoolean(int ordinal, SqlBoolean value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlBoolean(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlByte(int ordinal, SqlByte value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlByte(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlInt16(int ordinal, SqlInt16 value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlInt16(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlInt32(int ordinal, SqlInt32 value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlInt32(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlInt64(int ordinal, SqlInt64 value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlInt64(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlSingle(int ordinal, SqlSingle value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlSingle(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlDouble(int ordinal, SqlDouble value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlDouble(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlMoney(int ordinal, SqlMoney value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlMoney(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlDateTime(int ordinal, SqlDateTime value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlDateTime(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
#if WINFS_UTC
public virtual void SetSqlUtcDateTime(int ordinal, SqlUtcDateTime value) {
ValueUtilsSmi.SetSqlUtcDateTime( _eventSink, _recordBuffer, ordinal, GetSmiMetaData( ordinal ), value );
}
public virtual void SetSqlDate(int ordinal, SqlDate value) {
ValueUtilsSmi.SetSqlDate( _eventSink, _recordBuffer, ordinal, GetSmiMetaData( ordinal ), value );
}
public virtual void SetSqlTime(int ordinal, SqlTime value) {
ValueUtilsSmi.SetSqlTime( _eventSink, _recordBuffer, ordinal, GetSmiMetaData( ordinal ), value );
}
#endif
public virtual void SetSqlXml(int ordinal, SqlXml value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlXml(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlDecimal(int ordinal, SqlDecimal value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlDecimal(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlString(int ordinal, SqlString value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlString(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlBinary(int ordinal, SqlBinary value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlBinary(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlGuid(int ordinal, SqlGuid value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlGuid(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlChars(int ordinal, SqlChars value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlChars(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
public virtual void SetSqlBytes(int ordinal, SqlBytes value) {
EnsureSubclassOverride();
ValueUtilsSmi.SetSqlBytes(_eventSink, _recordBuffer, ordinal, GetSmiMetaData(ordinal), value);
}
//
// SqlDataRecord public API
//
public SqlDataRecord( params SqlMetaData[] metaData ) {
// Initial consistency check
if ( null == metaData ) {
throw ADP.ArgumentNull( "metadata" );
}
_columnMetaData = new SqlMetaData[metaData.Length];
_columnSmiMetaData = new SmiExtendedMetaData[metaData.Length];
ulong smiVersion = SmiVersion;
for (int i = 0; i < _columnSmiMetaData.Length; i++) {
_columnMetaData[i] = metaData[i];
_columnSmiMetaData[i] = MetaDataUtilsSmi.SqlMetaDataToSmiExtendedMetaData( _columnMetaData[i] );
if (!MetaDataUtilsSmi.IsValidForSmiVersion(_columnSmiMetaData[i], smiVersion)) {
throw ADP.VersionDoesNotSupportDataType(_columnSmiMetaData[i].TypeName);
}
}
_eventSink = new SmiEventSink_Default( );
if (InOutOfProcHelper.InProc) {
_recordContext = SmiContextFactory.Instance.GetCurrentContext();
_recordBuffer = _recordContext.CreateRecordBuffer( _columnSmiMetaData, _eventSink );
_usesStringStorageForXml = false;
}
else {
_recordContext = null;
_recordBuffer = new MemoryRecordBuffer(_columnSmiMetaData);
_usesStringStorageForXml = true;
}
_eventSink.ProcessMessagesAndThrow();
}
internal SqlDataRecord( SmiRecordBuffer recordBuffer, params SmiExtendedMetaData[] metaData ) {
Debug.Assert(null != recordBuffer, "invalid attempt to instantiate SqlDataRecord with null SmiRecordBuffer");
Debug.Assert(null != metaData, "invalid attempt to instantiate SqlDataRecord with null SmiExtendedMetaData[]");
_columnMetaData = new SqlMetaData[metaData.Length];
_columnSmiMetaData = new SmiExtendedMetaData[metaData.Length];
for (int i = 0; i < _columnSmiMetaData.Length; i++) {
_columnSmiMetaData[i] = metaData[i];
_columnMetaData[i] = MetaDataUtilsSmi.SmiExtendedMetaDataToSqlMetaData( _columnSmiMetaData[i] );
}
_eventSink = new SmiEventSink_Default( );
if (InOutOfProcHelper.InProc) {
_recordContext = SmiContextFactory.Instance.GetCurrentContext();
}
else {
_recordContext = null;
}
_recordBuffer = recordBuffer;
_eventSink.ProcessMessagesAndThrow();
}
//
// SqlDataRecord private members
//
internal SmiRecordBuffer RecordBuffer { // used by SqlPipe
get {
return _recordBuffer;
}
}
internal SmiContext RecordContext {
get {
return _recordContext;
}
}
private ulong SmiVersion {
get {
return InOutOfProcHelper.InProc ? SmiContextFactory.Instance.NegotiatedSmiVersion : SmiContextFactory.LatestVersion;
}
}
internal SqlMetaData[] InternalGetMetaData() {
return _columnMetaData;
}
internal SmiExtendedMetaData[] InternalGetSmiMetaData() {
return _columnSmiMetaData;
}
internal SmiExtendedMetaData GetSmiMetaData( int ordinal ) {
return _columnSmiMetaData[ordinal];
}
internal void ThrowIfInvalidOrdinal( int ordinal ) {
if ( 0 > ordinal || FieldCount <= ordinal ) {
throw ADP.IndexOutOfRange( ordinal );
}
}
private void EnsureSubclassOverride() {
if (null == _recordBuffer) {
throw SQL.SubclassMustOverride();
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PopupRoot.cs
- GroupByExpressionRewriter.cs
- XmlCharacterData.cs
- XmlDomTextWriter.cs
- ReferencedAssembly.cs
- CompilerCollection.cs
- Closure.cs
- WindowsScrollBarBits.cs
- XmlSchemaAnnotation.cs
- WrappedIUnknown.cs
- SliderAutomationPeer.cs
- TagPrefixInfo.cs
- ObjectDisposedException.cs
- Operator.cs
- ExpressionEditor.cs
- Point3DAnimation.cs
- NetworkStream.cs
- newinstructionaction.cs
- Timeline.cs
- ADMembershipUser.cs
- PerformanceCounterManager.cs
- ThreadSafeList.cs
- WebPartMenuStyle.cs
- ProfileGroupSettingsCollection.cs
- PrintControllerWithStatusDialog.cs
- DbException.cs
- FeatureManager.cs
- CollectionEditorDialog.cs
- BamlStream.cs
- QuaternionIndependentAnimationStorage.cs
- CodeAccessPermission.cs
- PnrpPermission.cs
- MDIControlStrip.cs
- Highlights.cs
- InputBuffer.cs
- TransformGroup.cs
- ObjectContextServiceProvider.cs
- XmlValidatingReaderImpl.cs
- XmlValidatingReaderImpl.cs
- Solver.cs
- IApplicationTrustManager.cs
- StyleSelector.cs
- SchemaTypeEmitter.cs
- IDQuery.cs
- ZoneButton.cs
- SubqueryTrackingVisitor.cs
- ContextBase.cs
- GridViewUpdateEventArgs.cs
- BindingNavigator.cs
- TableCell.cs
- ComplexLine.cs
- CharKeyFrameCollection.cs
- DecimalAnimation.cs
- XmlWrappingReader.cs
- GeometryModel3D.cs
- DocumentScope.cs
- WindowsListViewItemCheckBox.cs
- FormsAuthenticationModule.cs
- Helpers.cs
- ChildChangedEventArgs.cs
- ScriptMethodAttribute.cs
- _ContextAwareResult.cs
- MenuItem.cs
- TdsParameterSetter.cs
- NameObjectCollectionBase.cs
- SafeNativeMethods.cs
- SchemaNames.cs
- __Error.cs
- TypeSource.cs
- KeyedCollection.cs
- DataGridItemAttachedStorage.cs
- RegexWorker.cs
- CompositeFontInfo.cs
- TimeoutConverter.cs
- XmlQueryStaticData.cs
- GACMembershipCondition.cs
- X509IssuerSerialKeyIdentifierClause.cs
- WorkflowViewService.cs
- HandlerMappingMemo.cs
- DbProviderServices.cs
- DataRowExtensions.cs
- ShaderRenderModeValidation.cs
- Parsers.cs
- Stackframe.cs
- PagesSection.cs
- ApplicationSecurityManager.cs
- MimePart.cs
- NamespaceQuery.cs
- Decoder.cs
- MachineKeyConverter.cs
- XamlInt32CollectionSerializer.cs
- DataBindEngine.cs
- RenderData.cs
- _BufferOffsetSize.cs
- QueueSurrogate.cs
- SafeEventLogReadHandle.cs
- ContentTypeSettingClientMessageFormatter.cs
- UnauthorizedWebPart.cs
- DrawingCollection.cs
- AsnEncodedData.cs