1 // Licensed to the .NET Foundation under one or more agreements. 2 // The .NET Foundation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 6 7 //------------------------------------------------------------------------------ 8 9 using System; 10 using System.Data.SqlTypes; 11 12 namespace Microsoft.SqlServer.Server 13 { 14 // interface for strongly-typed value setters 15 internal interface ITypedSettersV3 16 { 17 // By value setters (data copy across the interface boundary implied) 18 // All setters are valid for SqlDbType.Variant 19 20 // SetVariantMetaData is used to set the precise type of data just before pushing 21 // data into a variant type via one of the other setters. It 22 // is only valid to set metadata with a SqlDbType that associated with the 23 // data setter that will be called. 24 // Since LOBs, Udt's and fixed-length types are not currently stored in a variant, 25 // the following pairs are the only setters/sqldbtypes that need this call: 26 // NVarChar/VarChar + SetString (needed only for non-global collation, i.e. SqlString) 27 // Money/SmallMoney + SetInt64 SetVariantMetaData(SmiEventSink sink, int ordinal, SmiMetaData metaData)28 void SetVariantMetaData(SmiEventSink sink, int ordinal, SmiMetaData metaData); 29 30 // Set value to null 31 // valid for all types SetDBNull(SmiEventSink sink, int ordinal)32 void SetDBNull(SmiEventSink sink, int ordinal); 33 34 // valid for SqlDbType.Bit SetBoolean(SmiEventSink sink, int ordinal, Boolean value)35 void SetBoolean(SmiEventSink sink, int ordinal, Boolean value); 36 37 // valid for SqlDbType.TinyInt SetByte(SmiEventSink sink, int ordinal, Byte value)38 void SetByte(SmiEventSink sink, int ordinal, Byte value); 39 40 // Semantics for SetBytes are to modify existing value, not overwrite 41 // Use in combination with SetLength to ensure overwriting when necessary 42 // valid for SqlDbTypes: Binary, VarBinary, Image, Udt, Xml 43 // (VarBinary assumed for variants) SetBytes(SmiEventSink sink, int ordinal, long fieldOffset, byte[] buffer, int bufferOffset, int length)44 int SetBytes(SmiEventSink sink, int ordinal, long fieldOffset, byte[] buffer, int bufferOffset, int length); SetBytesLength(SmiEventSink sink, int ordinal, long length)45 void SetBytesLength(SmiEventSink sink, int ordinal, long length); 46 47 // Semantics for SetChars are to modify existing value, not overwrite 48 // Use in combination with SetLength to ensure overwriting when necessary 49 // valid for character types: Char, VarChar, Text, NChar, NVarChar, NText 50 // (NVarChar and global clr collation assumed for variants) SetChars(SmiEventSink sink, int ordinal, long fieldOffset, char[] buffer, int bufferOffset, int length)51 int SetChars(SmiEventSink sink, int ordinal, long fieldOffset, char[] buffer, int bufferOffset, int length); SetCharsLength(SmiEventSink sink, int ordinal, long length)52 void SetCharsLength(SmiEventSink sink, int ordinal, long length); 53 54 // valid for character types: Char, VarChar, Text, NChar, NVarChar, NText SetString(SmiEventSink sink, int ordinal, string value, int offset, int length)55 void SetString(SmiEventSink sink, int ordinal, string value, int offset, int length); 56 57 // valid for SqlDbType.SmallInt SetInt16(SmiEventSink sink, int ordinal, Int16 value)58 void SetInt16(SmiEventSink sink, int ordinal, Int16 value); 59 60 // valid for SqlDbType.Int SetInt32(SmiEventSink sink, int ordinal, Int32 value)61 void SetInt32(SmiEventSink sink, int ordinal, Int32 value); 62 63 // valid for SqlDbType.BigInt, SqlDbType.Money, SqlDbType.SmallMoney SetInt64(SmiEventSink sink, int ordinal, Int64 value)64 void SetInt64(SmiEventSink sink, int ordinal, Int64 value); 65 66 // valid for SqlDbType.Real SetSingle(SmiEventSink sink, int ordinal, Single value)67 void SetSingle(SmiEventSink sink, int ordinal, Single value); 68 69 // valid for SqlDbType.Float SetDouble(SmiEventSink sink, int ordinal, Double value)70 void SetDouble(SmiEventSink sink, int ordinal, Double value); 71 72 // valid for SqlDbType.Numeric (uses SqlDecimal since Decimal cannot hold full range) SetSqlDecimal(SmiEventSink sink, int ordinal, SqlDecimal value)73 void SetSqlDecimal(SmiEventSink sink, int ordinal, SqlDecimal value); 74 75 // valid for DateTime & SmallDateTime SetDateTime(SmiEventSink sink, int ordinal, DateTime value)76 void SetDateTime(SmiEventSink sink, int ordinal, DateTime value); 77 78 // valid for UniqueIdentifier SetGuid(SmiEventSink sink, int ordinal, Guid value)79 void SetGuid(SmiEventSink sink, int ordinal, Guid value); 80 } 81 } 82 83