簡體   English   中英

c#列數據類型日期類型(NOT DateTime)

[英]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);

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

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM