我在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
从数据库中检索数据。可以在这里发布该代码,但我不认为它需要它是非常基本的。
答案 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");