Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / Data / Microsoft / SqlServer / Server / SqlDataRecord.cs / 1 / 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
- SecurityKeyIdentifierClause.cs
- WorkflowViewManager.cs
- XmlSchemaNotation.cs
- OleDbDataReader.cs
- HttpResponse.cs
- Byte.cs
- ResizeGrip.cs
- StrokeNodeData.cs
- SqlReferenceCollection.cs
- ContextProperty.cs
- DynamicPropertyReader.cs
- FontStretches.cs
- CompoundFileReference.cs
- ConnectionConsumerAttribute.cs
- StringToken.cs
- ByteFacetDescriptionElement.cs
- BindingMemberInfo.cs
- ListParaClient.cs
- CompilerScope.Storage.cs
- CombinedGeometry.cs
- HybridWebProxyFinder.cs
- TableCell.cs
- TextRunCacheImp.cs
- DataStreamFromComStream.cs
- DateTimeOffset.cs
- TrackBarRenderer.cs
- Monitor.cs
- TextHidden.cs
- AdornedElementPlaceholder.cs
- TextServicesPropertyRanges.cs
- ComAdminInterfaces.cs
- AxImporter.cs
- GroupBoxRenderer.cs
- TextParagraphProperties.cs
- JsonSerializer.cs
- CryptoHelper.cs
- Model3DGroup.cs
- LocalTransaction.cs
- ContentFilePart.cs
- CodeCatchClauseCollection.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- CheckBoxList.cs
- UInt16Converter.cs
- unsafeIndexingFilterStream.cs
- FrameworkElement.cs
- RegexTree.cs
- SHA256.cs
- DefaultSerializationProviderAttribute.cs
- ActivityExecutor.cs
- KeyToListMap.cs
- TimelineCollection.cs
- MinimizableAttributeTypeConverter.cs
- RoutedEventConverter.cs
- DeleteBookmarkScope.cs
- LambdaCompiler.Unary.cs
- Mutex.cs
- WebPartConnectVerb.cs
- ExternalException.cs
- DictionaryEntry.cs
- ByeMessage11.cs
- ExceptQueryOperator.cs
- AddressHeader.cs
- DbConnectionPoolCounters.cs
- DataServiceRequestArgs.cs
- ImageDrawing.cs
- IntSecurity.cs
- DateTimeAutomationPeer.cs
- StructuredTypeEmitter.cs
- HierarchicalDataBoundControl.cs
- DiscoveryEndpointElement.cs
- Visual3D.cs
- SqlUnionizer.cs
- CodeAttachEventStatement.cs
- path.cs
- EntityKeyElement.cs
- ContractSearchPattern.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- DataGridViewColumn.cs
- BaseProcessProtocolHandler.cs
- SqlDataSourceAdvancedOptionsForm.cs
- DelegateArgumentReference.cs
- IndexedWhereQueryOperator.cs
- ManagementObject.cs
- AndCondition.cs
- CheckPair.cs
- ObjectPropertyMapping.cs
- GlobalizationSection.cs
- RegexCapture.cs
- OrderByQueryOptionExpression.cs
- GridViewUpdatedEventArgs.cs
- CustomAssemblyResolver.cs
- DateTimePickerDesigner.cs
- UrlParameterReader.cs
- FormViewInsertedEventArgs.cs
- CheckBoxField.cs
- SqlBuffer.cs
- EpmSourcePathSegment.cs
- ServiceNameCollection.cs
- CollectionDataContractAttribute.cs
- ParserStreamGeometryContext.cs