[英]c# Column datatype Date type (NOT DateTime)
我想知道有沒有很好的方法來檢測日期字段的列數據類型(NOT DateTime)?
這就是我現在所做的:
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);
DateTime.ToString非常靈活http://msdn.microsoft.com/library/zdtaw1bw.aspx
我使用了一種稍微不同的方法來解決同樣的問題
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;
}
如果使用SqlDataReader,則可以調用GetSchemaTable ,這將使您可以訪問每列的基礎SQL Server數據類型 - 它在該鏈接的MSDN引用中返回的模式信息的完整列表。 因此,如果您確實需要獲取基礎SQL Server架構,那么這是一種方法。
SqlDataAdapter確實有一個FillSchema方法,但我不認為它實際上為您提供了底層的數據庫類型。
實際上,“Date”是CLR中的內置數據類型,盡管它現在被標記為“過時”。 IDE甚至沒有顯示它......
無論如何,在任何情況下,當你想要kwnow一個對象的類型時,我認為obj.GetType()。Name不是最好的方法,因為當你真正想知道一個obj是什么時,你最終會比較字符串ceratin類型。
我會去的
if (dt.Columns[col] is DateTime)
.....
else
if (dt.Columns[col] is Date)
...
我只是展示了執行數據類型檢查的另一種方法。 你說自己,不可能與“日期”比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.