public SqlFormatException(string message, SqlDataTypeValue sqlDataTypeValue, object value, SqlFormatExceptionType sqlFormatExType)
     : base(message)
 {
     SqlDataTypeValue = sqlDataTypeValue;
     Value            = value;
     SqlFormatExType  = sqlFormatExType;
 }
Beispiel #2
0
        private static object ConvertToSqlIntegerType(object value, SqlConvertSettings convertSettings)
        {
            SqlDataTypeValue sqlDataTypeValue = convertSettings.SqlDataTypeValue;
            SqlDataType      sqlDataType      = sqlDataTypeValue.SqlDataType;

            try
            {
                if (sqlDataType == SqlDataType.BigIntSql)
                {
                    if (value is long || value is SqlInt64)
                    {
                        return(value);
                    }
                    else if (long.TryParse(value.ToString().Trim(), convertSettings.NumberStyles, convertSettings.Culture, out long res))
                    {
                        return(res);
                    }
                }
                else if (sqlDataType == SqlDataType.IntSql)
                {
                    if (value is int || value is SqlInt32)
                    {
                        return(value);
                    }
                    else if (int.TryParse(value.ToString().Trim(), convertSettings.NumberStyles, convertSettings.Culture, out int res))
                    {
                        return(res);
                    }
                }
                else if (sqlDataType == SqlDataType.SmallIntSql)
                {
                    if (value is short || value is SqlInt16)
                    {
                        return(value);
                    }
                    else if (short.TryParse(value.ToString().Trim(), convertSettings.NumberStyles, convertSettings.Culture, out short res))
                    {
                        return(res);
                    }
                }
                else if (sqlDataType == SqlDataType.TinyIntSql)
                {
                    if (value is byte || value is SqlByte)
                    {
                        return(value);
                    }
                    else if (byte.TryParse(value.ToString().Trim(), convertSettings.NumberStyles, convertSettings.Culture, out byte res))
                    {
                        return(res);
                    }
                }
            } catch (Exception ex)
            {
                throw new SqlFormatException(ex.Message, sqlDataTypeValue, value, SqlFormatExceptionType.InvalidValueError);
            }

            throw new SqlFormatException(sqlDataTypeValue, value, SqlFormatExceptionType.InvalidValueError);
        }
Beispiel #3
0
 public SqlConvertSettings(SqlDataTypeValue sqlDataTypeValue, string[] sourceFormats, object replacementIfNull,
                           object replacementIfEmptyOrWhiteSpaceString, SqlReplacementType nullReplacementType, SqlReplacementType emptyStringReplacementType)
     : this(sqlDataTypeValue, sourceFormats)
 {
     ReplacementIfNull = replacementIfNull;
     ReplacementIfEmptyOrWhiteSpaceString = replacementIfEmptyOrWhiteSpaceString;
     NullReplacementType        = nullReplacementType;
     EmptyStringReplacementType = emptyStringReplacementType;
 }
Beispiel #4
0
 public SqlConvertSettings(SqlDataTypeValue sqlDataTypeValue, string[] sourceFormats = null)
 {
     SqlDataTypeValue = sqlDataTypeValue ?? throw new ArgumentNullException(nameof(sqlDataTypeValue));
     SourceFormats    = sourceFormats;
 }
Beispiel #5
0
        public static object ConvertToSqlType(object value, SqlConvertSettings convertSettings)
        {
            if (convertSettings == null)
            {
                throw new ArgumentNullException(nameof(convertSettings));
            }

            SqlDataTypeValue sqlDataTypeValue = convertSettings.SqlDataTypeValue;
            SqlDataType      sqlDataType      = sqlDataTypeValue.SqlDataType;

            try
            {
                if (value.In(null, DBNull.Value))
                {
                    if (convertSettings.ReplacementIfNull != null &&
                        convertSettings.ReplacementIfNull != DBNull.Value &&
                        convertSettings.NullReplacementType != SqlReplacementType.NONE)
                    {
                        value = convertSettings.ReplacementIfNull;
                    }
                    else
                    {
                        if (!sqlDataTypeValue.IsNullable)
                        {
                            throw new SqlFormatException(sqlDataTypeValue, value, SqlFormatExceptionType.NullError);
                        }

                        return(DBNull.Value);
                    }
                }
                else if (string.IsNullOrWhiteSpace(value.ToString()))
                {
                    if (convertSettings.EmptyStringReplacementType != SqlReplacementType.NONE)
                    {
                        value = convertSettings.ReplacementIfEmptyOrWhiteSpaceString;

                        if (value.In(null, DBNull.Value))
                        {
                            if (sqlDataTypeValue.IsNullable)
                            {
                                return(DBNull.Value);
                            }
                            else
                            {
                                throw new SqlFormatException(sqlDataTypeValue, value, SqlFormatExceptionType.NullError);
                            }
                        }
                    }
                }

                string[] formats = convertSettings.SourceFormats;

                if (sqlDataType.SqlTypeGroup == SqlDateTypeGroup.TextTypes || sqlDataType == SqlDataType.VariantSql)
                {
                    return(value);
                }
                else if (sqlDataType.SqlTypeGroup == SqlDateTypeGroup.CharTypes)
                {
                    if (sqlDataTypeValue.MaxLength > 0 && value.ToString().Length > sqlDataTypeValue.MaxLength)
                    {
                        throw new SqlFormatException(sqlDataTypeValue, value, SqlFormatExceptionType.InvalidValueLength);
                    }

                    return(value);
                }
                else if (sqlDataType.SqlTypeGroup == SqlDateTypeGroup.DateTimeTypes)
                {
                    if (value is DateTime || value is SqlDateTime)
                    {
                        return(value);
                    }
                    else if (DateTime.TryParseExact(value.ToString().Trim(), formats, convertSettings.Culture, convertSettings.DateTimeStyles, out DateTime resDt))
                    {
                        return(resDt);
                    }
                }
                else if (sqlDataType.SqlTypeGroup == SqlDateTypeGroup.IntegerTypes)
                {
                    return(ConvertToSqlIntegerType(value, convertSettings));
                }
                else if (sqlDataType.SqlTypeGroup == SqlDateTypeGroup.TimeTypes)
                {
                    if (value is TimeSpan ts)
                    {
                        return(ts);
                    }
                    else if (TimeSpan.TryParseExact(value.ToString().Trim(), formats, convertSettings.Culture, TimeSpanStyles.None, out TimeSpan resTime))
                    {
                        return(resTime);
                    }
                }
                else if (sqlDataType.SqlTypeGroup == SqlDateTypeGroup.DateTimeOffsetTypes)
                {
                    if (value is DateTimeOffset dtOffset)
                    {
                        return(dtOffset);
                    }
                    else if (DateTimeOffset.TryParseExact(value.ToString().Trim(), formats, convertSettings.Culture, convertSettings.DateTimeStyles, out DateTimeOffset resDtOffset))
                    {
                        return(resDtOffset);
                    }
                }
                else if (sqlDataType.SqlTypeGroup == SqlDateTypeGroup.BooleanTypes)
                {
                    if (value is bool || value is SqlBoolean)
                    {
                        return(value);
                    }
                    else if (value.ToString().Trim().In("1", "0"))
                    {
                        return(value.ToString().Trim() == "1");
                    }
                    else if (bool.TryParse(value.ToString().Trim(), out bool resBool))
                    {
                        return(resBool);
                    }
                }
                else if (sqlDataType.SqlTypeGroup.In(SqlDateTypeGroup.MonetaryTypes, SqlDateTypeGroup.FixedPrecisionTypes))
                {
                    decimal d;

                    if (value is decimal || value is SqlDecimal || value is SqlMoney)
                    {
                        d = (decimal)value;
                    }
                    else
                    {
                        d = decimal.Parse(value.ToString().Trim(), convertSettings.NumberStyles | NumberStyles.AllowDecimalPoint | NumberStyles.Number | NumberStyles.AllowCurrencySymbol, convertSettings.Culture);
                    }

                    return(d);
                }
                else if (sqlDataType == SqlDataType.FloatSql)
                {
                    if (value is double || value is SqlDouble)
                    {
                        return(value);
                    }
                    else if (double.TryParse(value.ToString().Trim(), convertSettings.NumberStyles | NumberStyles.Float, convertSettings.Culture, out double resDouble))
                    {
                        return(resDouble);
                    }
                }
                else if (sqlDataType == SqlDataType.RealSql)
                {
                    if (value is float || value is SqlSingle)
                    {
                        return(value);
                    }
                    else if (float.TryParse(value.ToString().Trim(), convertSettings.NumberStyles | NumberStyles.Float, convertSettings.Culture, out float resFloat))
                    {
                        return(resFloat);
                    }
                }
                else if (sqlDataType.SqlTypeGroup == SqlDateTypeGroup.BinaryTypes)
                {
                    if (value is byte[] || value is SqlBinary)
                    {
                        return(value);
                    }
                    else
                    {
                        var arr = value.ToString().ToCharArray().Select(c => (byte)c).ToArray();

                        if (sqlDataType != SqlDataType.ImageSql)
                        {
                            if (sqlDataTypeValue.MaxLength > 0 && arr.Length > sqlDataTypeValue.MaxLength)
                            {
                                throw new SqlFormatException(sqlDataTypeValue, value, SqlFormatExceptionType.InvalidValueLength);
                            }
                        }

                        return(arr);
                    }
                }
                else if (sqlDataType.SqlTypeGroup == SqlDateTypeGroup.GuidTypes)
                {
                    if (value is Guid || value is SqlGuid)
                    {
                        return(value);
                    }
                    else if (Guid.TryParse(value.ToString().Trim(), out Guid resGuid))
                    {
                        return(resGuid);
                    }
                }
                else
                {
                    return(value);
                }
            } catch (Exception ex)
            {
                if (ex is SqlFormatException)
                {
                    throw ex;
                }
                else
                {
                    throw new SqlFormatException(ex.Message, sqlDataTypeValue, value, SqlFormatExceptionType.InvalidValueError);
                }
            }

            throw new SqlFormatException(sqlDataTypeValue, value, SqlFormatExceptionType.InvalidValueError);
        }
 public SqlFormatException(SqlDataTypeValue sqlDataTypeValue, object value, SqlFormatExceptionType sqlFormatExType)
     : this("", sqlDataTypeValue, value, sqlFormatExType)
 {
 }