将数据表中的列的数据类型从日期时间更改为字符串

6

我正在从数据库中将数据加载到一个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);
    }
}

我想将该列格式化,使其不再包含完整日期,而是按照“月/日/年”的格式进行格式化。
我尝试循环遍历表中的每一行,并更改该列的单元格,但出现错误,提示该字符串不是有效的DateTime对象。
我尝试将列DateType更改为字符串,但出现错误,提示我无法在填充表后更改DateType。
我该如何做?这似乎是一个非常简单的事情,但我却遇到了很多麻烦。

你在哪里以及如何使用这个数据表?我建议你在UI层(例如作为数据源)使用它时格式化日期,而不是在之前。 - Claudio Redi
我正在将它绑定到一个GridView上。由于列是动态的,所以我无法在设计视图中进行格式化。列的索引也可能不同,因此在RowDataBound事件中更改它并不容易。 - Steven
如果是这种情况,那么您可能希望将列类型设置为字符串,并在插入值之前进行格式化。 - Aaron Daniels
@Aaron,他并不是手动插入这些值,一切都由Load()内部处理。 - Josh Stodola
我没有看到 sp。我会将 sp 更改为返回格式化的字符串而不是日期时间值。基本上按照 Josh 的指示在 sp 中进行格式化。 - Aaron Daniels
3个回答

12

作为一个解决方法,您可以创建一个新的列并在那里存储格式化后的日期:

dt.Columns.Add("DateStr");

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

4

将您的存储过程更改为使用CONVERT将字段转换为字符串...

SELECT CONVERT(varchar, DateFieldName, 101) AS DateFieldNameFormatted

101是mm/dd/yyyy的格式代码(请参见链接获取其他代码/格式)


2
您无法格式化DateTime结构值。不要这样想。它的目的是保存表示以下内容的值:

通常表示为日期和时间的时间点。

只有在将该实例的值转换为字符串时才能指定格式。保留您的DataTable架构。在需要格式化的任何地方,查看一些格式,您可以使用ToString(string)方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接