// Semantics for SetBytes are to modify existing value, not overwrite // Use in combination with SetLength to ensure overwriting when necessary // valid for SqlDbTypes: Binary, VarBinary, Image, Udt, Xml // (VarBinary assumed for variants) public override int SetBytes(SmiEventSink sink, int ordinal, long fieldOffset, byte[] buffer, int bufferOffset, int length) { CheckWritingToColumn(ordinal); return(_fieldSetters[ordinal].SetBytes(fieldOffset, buffer, bufferOffset, length)); }
// Set value to null // valid for all types public override void SetDBNull(SmiEventSink sink, int ordinal) { CheckSettingColumn(ordinal); _fieldSetters[ordinal].SetDBNull(); }
// valid for SqlDbType.TinyInt public override void SetByte(SmiEventSink sink, int ordinal, byte value) { CheckSettingColumn(ordinal); _fieldSetters[ordinal].SetByte(value); }
// valid for DateTimeOffset public override void SetDateTimeOffset(SmiEventSink sink, int ordinal, DateTimeOffset value) { CheckSettingColumn(ordinal); _fieldSetters[ordinal].SetDateTimeOffset(value); }
// valid for SqlDbType.Variant public override void SetVariantMetaData(SmiEventSink sink, int ordinal, SmiMetaData metaData) { CheckWritingToColumn(ordinal); _fieldSetters[ordinal].SetVariantType(metaData); }
// valid for SqlDbType.Numeric (uses SqlDecimal since Decimal cannot hold full range) public override void SetSqlDecimal(SmiEventSink sink, int ordinal, SqlDecimal value) { CheckSettingColumn(ordinal); _fieldSetters[ordinal].SetSqlDecimal(value); }
// valid for SqlDbType.Time public override void SetTimeSpan(SmiEventSink sink, int ordinal, TimeSpan value) { CheckSettingColumn(ordinal); _fieldSetters[ordinal].SetTimeSpan(value); }
// valid for character types: Char, VarChar, Text, NChar, NVarChar, NText public override void SetString(SmiEventSink sink, int ordinal, string value, int offset, int length) { CheckSettingColumn(ordinal); _fieldSetters[ordinal].SetString(value, offset, length); }
// valid for SqlDbType.BigInt, SqlDbType.Money, SqlDbType.SmallMoney public override void SetInt64(SmiEventSink sink, int ordinal, long value) { CheckSettingColumn(ordinal); _fieldSetters[ordinal].SetInt64(value); }
public override void SetCharsLength(SmiEventSink sink, int ordinal, long length) { CheckSettingColumn(ordinal); _fieldSetters[ordinal].SetCharsLength(length); }
// Set value to null // valid for all types public override void SetDBNull(SmiEventSink sink, int ordinal) { Debug.Assert(0 == ordinal, "TdsParameterSetter only supports 0 for ordinal. Actual = " + ordinal); _target.EndElements(sink); }
// valid for structured types // This method called for both get and set. internal override SmiTypedGetterSetter GetTypedGetterSetter(SmiEventSink sink, int ordinal) { Debug.Assert(0 == ordinal, "TdsParameterSetter only supports 0 for ordinal. Actual = " + ordinal); return(_target); }
// Close method does nothing (value is sent to TDS), but we need to override to avoid throwing // Also make sure protocol is followed (no calling setters after calling close). public override void Close(SmiEventSink eventSink) { #if DEBUG _currentField = Closed; #endif }
// Get utility class valid in current thread execution environment // This returns an object, to allow us to version the context without // having to version this class. (eg. SmiContext1 vs SmiContext2) internal abstract object GetCurrentContext(SmiEventSink eventSink);