代码之家  ›  专栏  ›  技术社区  ›  Jeff Meatball Yang

如何确定数据列的类型是数字、字符串还是日期时间?

  •  3
  • Jeff Meatball Yang  · 技术社区  · 15 年前

    我需要根据数据表中数据列的类型格式化输出。

    具体来说,我需要将内置的基元类型(int、string、decimal、datetime等)映射到:

    • someEnum.数字
    • 伯努姆
    • someEnum.datetime日期时间
    • 字符串,字符串
    • SomeEnum.未知
    • 零点

    我怎么能这样做?

    2 回复  |  直到 15 年前
        1
  •  10
  •   Community Mohan Dere    8 年前

    如果内置 TypeCode 枚举满足您的需要,然后您可以直接阅读 DataType 您的财产 DataColumn 然后打电话 GetTypeCode ,

    TypeCode yourTypeCode = Type.GetTypeCode(yourDataColumn.DataType);
    
    switch (yourTypeCode)
    {
        case TypeCode.Byte:
        case TypeCode.SByte:
        case TypeCode.Int16
        case TypeCode.UInt16:
        case TypeCode.Int32:
        case TypeCode.UInt32:
        case TypeCode.Int64:
        case TypeCode.UInt64:
        case TypeCode.Single:
        case TypeCode.Double:
        case TypeCode.Decimal:
            Console.WriteLine("Numeric");
            break;
        case TypeCode.Boolean:
            Console.WriteLine("Bool");
            break;
        case TypeCode.DateTime:
            Console.WriteLine("DateTime");
            break;
        case TypeCode.String:
            Console.WriteLine("String");
            break;
        case TypeCode.Empty:
            Console.WriteLine("Null");
            break;
        default:    // TypeCode.DBNull, TypeCode.Char and TypeCode.Object
            Console.WriteLine("Unknown");
            break;
    }
    

    如果 类型码 不满足您的需要,那么您可以简单地将列类型转换为自己的自定义枚举,如中所述。 John's answer .

        2
  •  1
  •   John Gietzen    15 年前

    你可以使用:

    var types = new Dictionary<Type, SomeEnum>()
    {
        { typeof(int), SomeEnum.Numeric },
        { typeof(long), SomeEnum.Numeric },
        { typeof(string), SomeEnum.String },
        ...
    };
    
    Func<Type, object, SomeEnum> getTypeEnum = (type, obj) =>
    {
        var result = types.ContainsKey(type)
                         ? types[type]
                         : SomeEnum.Unknown;
        if (obj == null || obj is DBNull)
        {
            result = SomeEnum.Null;
        }
    
        return result;
    };
    
    ...
    
    var e = getTypeEnum(col.DataType, row[col]);