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;
}
答
都能跟得上。没有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;
}
你觉得什么样的价值你得到的FullName属性为您的日期列? – 2010-04-15 14:55:23
Sam:SQL返回Date(与12:00:00)并且不希望将Date作为DateTime。 – 2010-04-15 14:59:04