【问题标题】:Unable to modify dataset无法修改数据集
【发布时间】:2012-12-23 13:13:26
【问题描述】:

这是我的一段 c# 代码

if (dsResult != null && dsResult.Tables[0].Rows.Count > 0)
{
    foreach (DataRow dr in dsResult.Tables[0].Rows)
    {
        dr["Date"] = Convert.ToDateTime(dr["Date"]).ToString("yyyy-MM-dd");
    }
}
dsResult.Tables[0].AcceptChanges();

我想要做的是数据集有一个格式为 d/m/yyyy 的Date,我正在尝试将数据修改为格式yyyy-MM-dd,但我的数据集没有得到更新。

【问题讨论】:

  • 您如何查看更新后的数据以确定它是否有效?
  • 我在 Visual Studio 中设置了一个断点
  • 您是否尝试修改数据库? AcceptChanges 不会那样做。
  • @JohnSaunders 你的意思是修改数据表
  • 我的意思是修改数据库中的数据。

标签: c# asp.net mysql datatable dataset


【解决方案1】:

日期存储方式和它的显示方式是两个截然不同的东西。例如,它在DataTable 中显示为1/7/2013 00:00:00 AM 的原因是因为它根据您的文化设置显示DateTime 的默认显示。

但是,这通常不是您想要的显示方式,因此有很多方法可以给这只猫剥皮,但我会给您一些方法。首先,您可以简单地更改应用程序的文化,使其默认以您想要的方式显示。

CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd";
Thread.CurrentThread.CurrentCulture = culture;

现在,当您显示 DateTime 值时,您将在默认情况下获得该文化,例如:

var dt = new DateTime();
dt.ToShortDateString(); // here is where the culture is used

您可能还会发现您的应用程序中有一个特定位置需要以某种方式显示它,您可以这样做:

var dt = new DateTime();
dt.ToString("dd-MM-yyyy"); // custom formatting on the fly

因此,简而言之,您不需要DataTable 中更改它。不管它如何显示都是一样的。

【讨论】:

  • 好吧,我实际上并没有显示它,而是使用通用函数将此数据表转换为 csv 文件,并且我希望日期字段采用 yyyy-MM-dd 格式
  • @jade,创建 CSV 文件与显示它没有什么不同。 DateTime 的底层 与它的显示方式甚至输出到 CSV 文件的方式实际上没有关系。 CSV 文件是逗号分隔的文本文件,是吗?那么这意味着您将不得不以string 格式显示 DateTime 是吗?那么这意味着当您将DateTime 放入 CSV 文件时,要么按照您想要的方式对其进行格式化(如第二个示例),要么更改您的文化。
猜你喜欢
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 2019-08-24
  • 2011-09-03
  • 2012-10-09
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
相关资源
最近更新 更多