diff --git a/src/libraries/System.Data.Common/src/System/Data/Common/ObjectStorage.cs b/src/libraries/System.Data.Common/src/System/Data/Common/ObjectStorage.cs index c6f399c89fda97..511d8d6b04029e 100644 --- a/src/libraries/System.Data.Common/src/System/Data/Common/ObjectStorage.cs +++ b/src/libraries/System.Data.Common/src/System/Data/Common/ObjectStorage.cs @@ -226,73 +226,89 @@ public override bool IsNull(int record) public override void Set(int recordNo, object value) { Debug.Assert(null != value, "null value"); + if (_nullValue == value) { _values[recordNo] = null; + return; } - else if (_dataType == typeof(object) || _dataType.IsInstanceOfType(value)) + + if (_dataType == typeof(object) || _dataType.IsInstanceOfType(value)) { _values[recordNo] = value; + return; } - else + + if (_dataType == typeof(Guid) && value.GetType() == typeof(string)) + { + _values[recordNo] = new Guid((string)value); + return; + } + + if (_dataType == typeof(byte[])) { - Type valType = value.GetType(); - if (_dataType == typeof(Guid) && valType == typeof(string)) + if (value.GetType() == typeof(bool)) { - _values[recordNo] = new Guid((string)value); + _values[recordNo] = BitConverter.GetBytes((bool)value); + return; } - else if (_dataType == typeof(byte[])) + + if (value.GetType() == typeof(char)) { - if (valType == typeof(bool)) - { - _values[recordNo] = BitConverter.GetBytes((bool)value); - } - else if (valType == typeof(char)) - { - _values[recordNo] = BitConverter.GetBytes((char)value); - } - else if (valType == typeof(short)) - { - _values[recordNo] = BitConverter.GetBytes((short)value); - } - else if (valType == typeof(int)) - { - _values[recordNo] = BitConverter.GetBytes((int)value); - } - else if (valType == typeof(long)) - { - _values[recordNo] = BitConverter.GetBytes((long)value); - } - else if (valType == typeof(ushort)) - { - _values[recordNo] = BitConverter.GetBytes((ushort)value); - } - else if (valType == typeof(uint)) - { - _values[recordNo] = BitConverter.GetBytes((uint)value); - } - else if (valType == typeof(ulong)) - { - _values[recordNo] = BitConverter.GetBytes((ulong)value); - } - else if (valType == typeof(float)) - { - _values[recordNo] = BitConverter.GetBytes((float)value); - } - else if (valType == typeof(double)) - { - _values[recordNo] = BitConverter.GetBytes((double)value); - } - else - { - throw ExceptionBuilder.StorageSetFailed(); - } + _values[recordNo] = BitConverter.GetBytes((char)value); + return; } - else + + if (value.GetType() == typeof(short)) + { + _values[recordNo] = BitConverter.GetBytes((short)value); + return; + } + + if (value.GetType() == typeof(int)) + { + _values[recordNo] = BitConverter.GetBytes((int)value); + return; + } + + if (value.GetType() == typeof(long)) + { + _values[recordNo] = BitConverter.GetBytes((long)value); + return; + } + + if (value.GetType() == typeof(ushort)) { - throw ExceptionBuilder.StorageSetFailed(); + _values[recordNo] = BitConverter.GetBytes((ushort)value); + return; + } + + if (value.GetType() == typeof(uint)) + { + _values[recordNo] = BitConverter.GetBytes((uint)value); + return; + } + + if (value.GetType() == typeof(ulong)) + { + _values[recordNo] = BitConverter.GetBytes((ulong)value); + return; + } + + if (value.GetType() == typeof(float)) + { + _values[recordNo] = BitConverter.GetBytes((float)value); + return; + } + + if (value.GetType() == typeof(double)) + { + _values[recordNo] = BitConverter.GetBytes((double)value); + return; } } + + throw ExceptionBuilder.StorageSetFailed(); } public override void SetCapacity(int capacity)