コード例 #1
0
 public StringBuilder Convert(StringBuilder stringBuilder, ISqlDataType dataType, object value)
 {
     if (!TryConvert(stringBuilder, dataType, value))
     {
         stringBuilder.Append(value);
     }
     return(stringBuilder);
 }
コード例 #2
0
        public string Convert(ISqlDataType dataType, object value)
        {
            string convertedValue;

            if (!TryConvert(dataType, value, out convertedValue))
            {
                convertedValue = value.ToString();
            }
            return(convertedValue);
        }
コード例 #3
0
        public void SetDataType(Type type, ISqlDataType dataType)
        {
            if (_dataTypes == null)
            {
                lock (this)
                    if (_dataTypes == null)
                    {
                        _dataTypes = new ConcurrentDictionary <Type, ISqlDataType>();
                    }
            }

            _dataTypes[type] = dataType;
        }
コード例 #4
0
        private static void ConvertDateTimeToSql(StringBuilder stringBuilder, ISqlDataType dataType, DateTime value)
        {
            var format =
                dataType.DataType == DataType.DateTime
                    ? "TO_DATE('{0:yyyy-MM-dd HH:mm:ss}', 'YYYY-MM-DD HH24:MI:SS')"
                    : "TO_TIMESTAMP('{0:yyyy-MM-dd HH:mm:ss.fffffff}', 'YYYY-MM-DD HH24:MI:SS.FF7')";

            if (value.Millisecond == 0)
            {
                format = value.Hour == 0 && value.Minute == 0 && value.Second == 0
                    ? "TO_DATE('{0:yyyy-MM-dd}', 'YYYY-MM-DD')"
                    : "TO_DATE('{0:yyyy-MM-dd HH:mm:ss}', 'YYYY-MM-DD HH24:MI:SS')";
            }

            stringBuilder.AppendFormat(format, value);
        }
コード例 #5
0
        protected override void BuildDataType(ISqlDataType type)
        {
            switch (type.DataType)
            {
            case DataType.DateTime:
                StringBuilder.Append("timestamp");
                break;

            case DataType.DateTime2:
                StringBuilder.Append("timestamp");
                break;

            case DataType.UInt32:
            case DataType.Int64:
                StringBuilder.Append("Number(19)");
                break;

            case DataType.SByte:
            case DataType.Byte:
                StringBuilder.Append("Number(3)");
                break;

            case DataType.Money:
                StringBuilder.Append("Number(19,4)");
                break;

            case DataType.SmallMoney:
                StringBuilder.Append("Number(10,4)");
                break;

            case DataType.NVarChar:
                StringBuilder.Append("VarChar2");
                if (type.Length > 0)
                {
                    StringBuilder.Append('(').Append(type.Length).Append(')');
                }
                break;

            default:
                base.BuildDataType(type);
                break;
            }
        }
コード例 #6
0
 public void SetDataType(Type type, ISqlDataType dataType)
 {
     _schemas[0].SetDataType(type, dataType);
 }
コード例 #7
0
ファイル: OracleXmlTable.cs プロジェクト: forki/bars2db
            private static string GetDataTypeText(ISqlDataType type)
            {
                switch (type.DataType)
                {
                case DataType.DateTime:
                    return("timestamp");

                case DataType.DateTime2:
                    return("timestamp");

                case DataType.UInt32:
                case DataType.Int64:
                    return("Number(19)");

                case DataType.SByte:
                case DataType.Byte:
                    return("Number(3)");

                case DataType.Money:
                    return("Number(19,4)");

                case DataType.SmallMoney:
                    return("Number(10,4)");

                case DataType.NVarChar:
                    return("VarChar2(" + (type.Length ?? 100) + ")");

                case DataType.NChar:
                    return("Char2(" + (type.Length ?? 100) + ")");

                case DataType.Double:
                    return("Float");

                case DataType.Single:
                    return("Real");

                case DataType.UInt16:
                    return("Int");

                case DataType.UInt64:
                    return("Decimal");

                case DataType.Int16:
                    return("SmallInt");

                case DataType.Int32:
                    return("Int");

                case DataType.Boolean:
                    return("Bit");
                }

                var text = type.DataType.ToString();

                if (type.Length > 0)
                {
                    text += "(" + type.Length + ")";
                }
                else if (type.Precision > 0)
                {
                    text += "(" + type.Precision + "," + type.Scale + ")";
                }

                return(text);
            }
コード例 #8
0
        protected override void BuildDataType(ISqlDataType type)
        {
            switch (type.DataType)
            {
            case DataType.Guid:
                StringBuilder.Append("VarChar");
                break;

            case DataType.SByte:
            case DataType.Byte:
                StringBuilder.Append("SmallInt");
                break;

            case DataType.Money:
                StringBuilder.Append("Decimal(19,4)");
                break;

            case DataType.SmallMoney:
                StringBuilder.Append("Decimal(10,4)");
                break;

            case DataType.DateTime2:
            case DataType.SmallDateTime:
            case DataType.DateTime:
                StringBuilder.Append("TimeStamp");
                break;

            case DataType.Boolean:
                StringBuilder.Append("Boolean");
                break;

            case DataType.Binary:
            case DataType.VarBinary:
            case DataType.Blob:
            case DataType.Image:
                StringBuilder.Append("Bytea");
                break;

            case DataType.NVarChar:
                StringBuilder.Append("VarChar");
                if (type.Length > 0)
                {
                    StringBuilder.Append('(').Append(type.Length).Append(')');
                }
                break;

            case DataType.Hierarchical:
                StringBuilder.Append("ltree");
                break;

            case DataType.Undefined:
                if (type.Type == typeof(string))
                {
                    goto case DataType.NVarChar;
                }
                break;

            default:
                base.BuildDataType(type);
                break;
            }
        }
コード例 #9
0
        public bool TryConvert(StringBuilder stringBuilder, ISqlDataType dataType, object value)
        {
            if (value == null)
            {
                stringBuilder.Append("NULL");
                return(true);
            }

            var type = value.GetType();

            ConverterType converter = null;

            if (_converters.Count > 0 && !type.IsEnumEx())
            {
                switch (type.GetTypeCodeEx())
                {
                case TypeCode.DBNull:
                    stringBuilder.Append("NULL");
                    return(true);

                case TypeCode.Boolean:
                    converter = _booleanConverter;
                    break;

                case TypeCode.Char:
                    converter = _charConverter;
                    break;

                case TypeCode.SByte:
                    converter = _sByteConverter;
                    break;

                case TypeCode.Byte:
                    converter = _byteConverter;
                    break;

                case TypeCode.Int16:
                    converter = _int16Converter;
                    break;

                case TypeCode.UInt16:
                    converter = _uInt16Converter;
                    break;

                case TypeCode.Int32:
                    converter = _int32Converter;
                    break;

                case TypeCode.UInt32:
                    converter = _uInt32Converter;
                    break;

                case TypeCode.Int64:
                    converter = _int64Converter;
                    break;

                case TypeCode.UInt64:
                    converter = _uInt64Converter;
                    break;

                case TypeCode.Single:
                    converter = _singleConverter;
                    break;

                case TypeCode.Double:
                    converter = _doubleConverter;
                    break;

                case TypeCode.Decimal:
                    converter = _decimalConverter;
                    break;

                case TypeCode.DateTime:
                    converter = _dateTimeConverter;
                    break;

                case TypeCode.String:
                    converter = _stringConverter;
                    break;

                default:
                    _converters.TryGetValue(type, out converter);
                    break;
                }
            }

            if (converter != null)
            {
                converter(stringBuilder, dataType, value);
                return(true);
            }

            if (_baseConverters.Length > 0)
            {
                foreach (var valueConverter in _baseConverters)
                {
                    if (valueConverter.TryConvert(stringBuilder, dataType, value))
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }