我正在将数据从我的数据库加载到DataTable中,其中一列是日期字段。
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 :(得分:11)
作为一种解决方法,您可以创建一个新列并将格式化的日期存储在那里:
dt.Columns.Add("DateStr");
foreach (DataRow dr in dt.Rows)
{
dr["DateStr"] = string.Format("{0:MM/dd/yyyy}", dr["OriginalDate"]);
}
答案 1 :(得分:4)
更改存储过程,使用CONVERT
...
SELECT CONVERT(varchar, DateFieldName, 101) AS DateFieldNameFormatted
101是mm / dd / yyyy的格式代码(参见其他代码/格式的链接)
答案 2 :(得分:2)
您无法格式化DateTime struct值。不要那么想。它的目的是保存一个代表:
的值通常是时间的瞬间 表示为日期和时间。
只有在将该实例的值转换为字符串时才能指定格式。保留DataTable架构。无论您需要对其进行格式化,请查看可以使用formats方法的部分ToString(string)。