public override void SetParameter(DataConnection dataConnection, IDbDataParameter parameter, string name, DbDataType dataType, object?value) { switch (dataType.DataType) { case DataType.DateTimeOffset: if (value is DateTimeOffset dto) { dto = DataTools.AdjustPrecision(dto, (byte?)dataType.Precision ?? 6); var zone = (dto.Offset < TimeSpan.Zero ? "-" : "+") + dto.Offset.ToString("hh\\:mm"); value = Adapter.CreateOracleTimeStampTZ(dto, zone); } break; case DataType.Boolean: dataType = dataType.WithDataType(DataType.Byte); if (value is bool boolValue) { value = boolValue ? (byte)1 : (byte)0; } break; case DataType.Guid: if (value is Guid guid) { value = guid.ToByteArray(); } break; case DataType.Time: // According to http://docs.oracle.com/cd/E16655_01/win.121/e17732/featOraCommand.htm#ODPNT258 // Inference of DbType and OracleDbType from Value: TimeSpan - Object - IntervalDS if (value is TimeSpan) { dataType = dataType.WithDataType(DataType.Undefined); } break; case DataType.BFile: { // TODO: BFile we do not support setting parameter value value = null; break; } case DataType.DateTime: { if (value is DateTime dt) { value = DataTools.AdjustPrecision(dt, 0); } break; } case DataType.DateTime2: { if (value is DateTime dt) { value = DataTools.AdjustPrecision(dt, (byte?)dataType.Precision ?? 6); } break; } } if (dataType.DataType == DataType.Undefined && value is string && ((string)value).Length >= 4000) { dataType = dataType.WithDataType(DataType.NText); } base.SetParameter(dataConnection, parameter, name, dataType, value); }