2010-11-24 56 views
6

我正在將數據從我的數據庫加載到DataTable中,其中一列是日期字段。將DataTable中的列的DataType從DateTime更改爲字符串

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) 
{ 
    SqlCommand cmd = conn.CreateCommand(); 
    cmd.CommandText = "MySP"; 
    cmd.CommandType = CommandType.StoredProcedure; 

    conn.Open(); 
    using (SqlDataReader rdr = cmd.ExecuteReader()) 
    { 
     dt.Load(rdr); 
    } 
} 

我想格式化該列,而不是包含完整日期,它將被格式化爲「MM/DD/YYYY」。

我試圖通過表中的每一行循環和改變細胞該列,但我得到一個錯誤,指出該字符串不是有效的DateTime對象。

我試圖改變列DateType爲一個字符串,但我得到一個錯誤,說表填滿後,我改變不了DateType。

我該怎麼做?這看起來很簡單,但我遇到了很多麻煩。

+0

在哪裏以及如何您使用的這些數據表?我會說你應該在你的UI層上使用它的日期格式(例如作爲數據源),而不是之前。 – 2010-11-24 21:34:38

回答

10

這樣的工作,你可以圍繞創建新列並存儲有格式化的日期:

dt.Columns.Add("DateStr"); 

foreach (DataRow dr in dt.Rows) 
{ 
    dr["DateStr"] = string.Format("{0:MM/dd/yyyy}", dr["OriginalDate"]); 
} 
2

您無法格式化DateTime struct值。不要這樣想。它的目的是保持代表以下值:

即時時間,通常爲 表示爲日期和時間。

只能在將該實例的值轉換爲字符串時指定格式。按原樣保留您的DataTable架構。無論您需要格式化它,請查看一些formats,您可以使用ToString(string)方法。

4

更改存儲過程的字段轉換爲使用CONVERT字符串...

SELECT CONVERT(varchar, DateFieldName, 101) AS DateFieldNameFormatted 

的101是用於爲mm/dd/yyyy的(參見鏈接其它代碼/格式)

格式代碼