2010-04-15 162 views
3

我想知道有沒有好的方法來檢測列數據類型日期字段(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

回答

7

都能跟得上。沒有Date類型,只有DateTime。如果這來自使用date列的SQL Server 2008表,則它將映射到.​​NET中的DateTime

如果您需要了解此信息,那麼您必須在SQL級別執行此操作;當它被加載到DataTable時,已經太晚了。

我還不能肯定你的需求,但它看起來像你也許可以逃脫只是檢查午夜,使用一個不同的格式:

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

如果您使用的是SqlDataReader,則可以調用GetSchemaTable,這將使您可以訪問每列的基礎SQL Server數據類型 - 它將在該鏈接的MSDN參考中返回的模式信息的完整列表。所以這是一種方法,如果你真的需要獲得基礎的SQL Server架構。

SqlDataAdapter確實有一個FillSchema方法,但我不認爲這實際上給你的底層數據庫類型。

0

實際上,「Date」是CLR中的一種內置數據類型,雖然它現在被標記爲「過時」。 IDE甚至不顯示它...

無論如何,因爲在任何情況下,當你想知道一個對象的類型,我認爲obj.GetType()。名稱不是最好的方式去,因爲你結束當你真的想知道一個obj是否是角蛋白類型的時候比較字符串。

我與

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

我只是顯示的數據類型進行檢查的另一種方式去。你說你自己,它不可能比較「日期」。

1

我使用了一個稍微不同的方法來解決同一個問題

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; 
} 
相關問題