c#列数据类型日期类型(NOT日期时间)

问题描述:

我想知道有没有好的方法来检测列数据类型日期字段(NOT日期时间)?c#列数据类型日期类型(NOT日期时间)

这目前我做的:

switch (dt.Columns[col].DataType.FullName) 
{ 
    case "System.DateTime": 
     formatedVal = Formatter.GetDateTime(val); 
     break; 

    // which is NOT possible, but something equivalent am looking for 
    case "System.Date": 
     formatedVal = Formatter.GetDate(val); 
     break; 

    default: 
     formatedVal = val.ToString(); 
     break; 
} 
+0

你觉得什么样的价值你得到的FullName属性为您的日期列? – 2010-04-15 14:55:23

+0

Sam:SQL返回Date(与12:00:00)并且不希望将Date作为DateTime。 – 2010-04-15 14:59:04

都能跟得上。没有Date类型,只有DateTime。如果这来自使用date列的SQL Server 2008表,则它将映射到.​​NET中的DateTime

如果您需要了解此信息,那么您必须在SQL级别执行此操作;当它被加载到DataTable时,已经太晚了。

我还不能肯定你的需求,但它看起来像你也许可以逃脱只是检查午夜,使用一个不同的格式:

DateTime dt = (DateTime)val; 
return (dt == dt.Date) ? Formatter.GetDate(dt) : Formatter.GetDateTime(dt); 

如果您使用的是SqlDataReader,则可以调用GetSchemaTable,这将使您可以访问每列的基础SQL Server数据类型 - 它将在该链接的MSDN参考中返回的模式信息的完整列表。所以这是一种方法,如果你真的需要获得基础的SQL Server架构。

SqlDataAdapter确实有一个FillSchema方法,但我不认为这实际上给你的底层数据库类型。

实际上,“Date”是CLR中的一种内置数据类型,虽然它现在被标记为“过时”。 IDE甚至不显示它...

无论如何,因为在任何情况下,当你想知道一个对象的类型,我认为obj.GetType()。名称不是最好的方式去,因为你结束当你真的想知道一个obj是否是角蛋白类型的时候比较字符串。

我与

if (dt.Columns[col] is DateTime) 
..... 
else 
    if (dt.Columns[col] is Date) 
    ... 

我只是显示的数据类型进行检查的另一种方式去。你说你自己,它不可能比较“日期”。

我使用了一个稍微不同的方法来解决同一个问题

switch (dt.Columns[col].DataType.FullName) 
{ 
    case "System.DateTime": 
     formatedVal = ((DateTime)dataRow[col]).ToString("d"); 
     break; 

    case "System.Date": 
     formatedVal = ((DateTime)dataRow[col]).ToString(); 
     break; 

    default: 
     formatedVal = dataRow[col].ToString(); 
     break; 
}