以错误的格式从数据库读取日期?

时间:2013-03-14 18:42:56

标签: c# sql datetime formatexception

我在C#winforms工具中使用DateTime,我正在使用以下行将日期存储到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从数据库中检索数据。可以在这里发布该代码,但我不认为它需要它是非常基本的。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您的iDiscRow[TableNames.Discs.acquirementDate]似乎已经是DateTime了。在这种情况下,你只需要施放它。

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

您获得3/14/2013 12:00:00 AM的原因是DateTime.ToString()使用当前线程文化将DateTime转换为string。由于它是WinForm应用程序,我想这是DateTime的Windows系统格式。

答案 2 :(得分:0)

如果数据库值可能为null,则此答案仅相关。这通常是我自己的情况,所以我在类库的helper类中编写了这个函数。

    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");