0

DateTime在我的 C# winforms 工具中使用,我使用这一行将日期存储到 SQL 数据库中:

iDisc.acquirementDate.ToString("yyyy-MM-dd")

SQL数据库字段是DATE类型的,当这个日期被存储时,它的存储是正确的,比如这样:2013-03-14

当我想要这个值时,我使用这一行:

DateTime acquirementDate = DateTime.ParseExact(iDiscRow[TableNames.Discs.acquirementDate].ToString(), "yyyy-MM-dd", CultureInfo.InvariantCulture);

但是,在上面的行会发生 FormatException,因为正在解析的字符串不是有效的 DateTime 投诉字符串。

正在解析的值是:3/14/2013 12:00:00 AM

我不明白的是,为什么3/14/2013 12:00:00 AM在数据库中存储的值读取为2013-03-14

我正在使用SqlDataReader从数据库中检索数据。可以在这里发布该代码,但我认为它不是非常基本的。

4

3 回答 3

1

该行作为对象检索。ToString() 方法正在格式化它。您需要将要使用的格式传递给 ToString() 方法。

于 2013-03-14T18:44:49.337 回答
1

看来您iDiscRow[TableNames.Discs.acquirementDate]已经是 DateTime 了。在这种情况下,您只需要投射它。

DateTime acquirementDate = (DateTime)iDiscRow[TableNames.Discs.acquirementDate];

你得到的原因3/14/2013 12:00:00 AMDateTime.ToString()使用当前的线程文化转换DateTimestring. 由于它是 WinForm 应用程序,我猜这是您的 Windows 系统格式DateTime

于 2013-03-14T18:47:14.713 回答
0

仅当数据库值可能为空时,此答案才有意义。这经常是我自己的情况,所以我在类库的帮助类中编写了这个函数。

    public DateTime? SetDateTimeValue(DataTable dataTableIn
      , int rowNumber, string fieldName)
    {
        DateTime? returnValue = new DateTime?();
        DateTime tempValue = new DateTime();
        try
        {
         string fieldValueAsString = dataTableIn.Rows[rowNumber][fieldName].ToString();
         result = DateTime.TryParse(fieldValueAsString, out tempValue);
         if (result)
                returnValue = tempValue;
            }
        catch
        {
            returnValue = null;
        }
        return returnValue;
    }

这是一个示例调用

DataTable data = dataAccess.GetEmergencyVisitDataFromClinicalApplicationSupport(VisitID);

        if (data.Rows.Count == 1)
        {
            ValueSetter setterOfValues = new ValueSetter();
            skip a bunch of lines.
            AdmitDecisionDateTime = 
            setterOfValues.SetDateTimeValue(data, 0, "admit_decision_datetime");
于 2013-03-14T19:47:44.817 回答