2013-10-02 50 views
1

我有一個DataTable對象並且可以訪問它的Columns集合。 對於這個集合中的每個項目,我需要確定列的類型並將其作爲以下字符串之一返回:'string''number''boolean''date''datetime''timeofday'。確定DataColumn是否僅爲日期

所以我這樣做如下:

foreach (DataColumn column in table.Columns) { 
    string colType = DermineColumnType(column); 
} 

. . . . 

string DeterminColumnType(DataColumn column) { 
    Type sysType = column.DataType 
    if (sysType == typeof(Boolen) 
     return "boolean"; 
    else if (sysType == typeof(Decimal) || sysType == typeof(Double) || sysType == typeof(Int32) ...) 
     return "number"; 
    . . . . . . 
    else 
     return "string"; 

} 

問題是與「日期」,「日期時間」和「一個timeofday的價值觀 - 我無法找到的DataColumn類的任何信息,讓我確定此列是否在數據庫表中定義爲「date」,「time」或「datetime」。 對於所有這些情況,DataColumn類的DataType屬性始終返回System.DateTime類型。 有沒有什麼辦法只基於DataColumn和/或DataTable對象獲取這些信息,而不執行額外的SQL語句?

+0

展示你是如何獲取數據。你可能需要調用['.GetSchemaTable()'](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getschematable.aspx),但我們需要看看你是如何得到這個結果集肯定並告訴你如何得到模式。 –

+0

它類似於以下內容: 'DataSet dataSet = new DataSet(); OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = connectionString; conn.Open(); OleDbCommand command = new OleDbCommand(sql,conn); OleDbDataAdapter dbAdapter = new OleDbDataAdapter(command); dbAdapter.Fill(dataSet);' – DevGuy

+0

And:是的,我們知道使用GetSchemaTable()或Connection.GetSchema()獲取每列的信息的可能性。我只是想知道是否有任何方法可以從DataColumn對象中獲取這些信息,而不需要額外的SQL請求(所有這些方法都會生成結果)。 不幸的是,這似乎是不可能的。我必須說這很奇怪。 – DevGuy

回答

0

日期和時間不是DataColumn的有效數據類型。 DateTime和TimeSpan是唯一與日期/時間相關的數據類型。

看來你不能僅僅從類型中知道它是日期還是時間,你需要查看DateTime對象或數據庫中的數據。

欲瞭解更多信息: http://msdn.microsoft.com/en-us/library/system.data.datacolumn.datatype.aspx

+0

當然我們知道在.NET中沒有Date或Time這樣的類型。但大多數數據庫都支持這些類型 - 所以知道僅包含DataColumn實例的此列的原始數據庫類型將非常有用。 – DevGuy

相關問題