2010-11-24 53 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的(参见链接其它代码/格式)

格式代码