当我尝试读取特定日期列时,我有一个特定的数据行抛出此错误 - "年,月和日参数描述了一个不可表示的DateTime"。
我提取了数百行数据,除了这一行外,它们都可以工作。除了这个日期时间列之外,我可以从这个有问题的行中提取其他列。我使用oracle数据读取器从数据库中获取日期时间,我可以使用Visual Studio中的监视工具检查我即将读入的行。在监视工具中一切看起来都很好 - 它看到了I列试图以日期时间的形式读入并拥有其所有属性。
while (reader.Read())
{
var temp = new FCCondition();
temp.CaseID = reader.GetString(0);
temp.Statute = reader.GetString(1);
if (!reader.IsDBNull(2))
temp.DueDate = reader.GetDateTime(2);
if (!reader.IsDBNull(3))
temp.HoursAssigned = reader.GetInt32(3);
if (!reader.IsDBNull(4))
temp.HoursCompleted = reader.GetInt32(4);
temp.JWConditionID = reader.GetString(5);
if (!reader.IsDBNull(6))
temp.StartDate = reader.GetDateTime(6);
if (!reader.IsDBNull(7))
temp.StatusDate = reader.GetDateTime(7);
if (temp.DueDate <= temp.StartDate)
temp.DueDate = temp.StartDate.AddMonths(18);
FCConditionsList.Add(temp);
}
}
抛出错误的是在StartDate中读取(reader.GetDateTime(6))。我已经尝试将它存储在一个var中,然后将它带到reader.GetOracleDate和reader.GetValue,它们仍然会抛出相同的错误。
之前的状态中包含了该手表工具的屏幕截图答案 0 :(得分:0)
我怀疑GetDateTime
来电不期待AM / PM符号?因此,它可能无法将其识别为有效的日期/时间。试试这个:
if (!reader.IsDBNull(6)) {
var temporaryDate = reader.GetValue(6).ToString();
DateTime outDate;
if (DateTime.TryParseExact(temporaryDate, "M/dd/yyyy h:mm:ss tt", null, DateTimeStyles.None, out outDate))
{
temp.StartDate = outDate;
}
}
编辑:我今天遇到了同样的问题并以不同的方式解决了......我正在使用Oracle数据访问托管客户端
if (!reader.IsDBNull(6)) {
var tempDate = reader.GetOracleDate(6);
temp.StartDate = new DateTime(tempDate.Year, tempDate.Month, tempDate.Day, tempDate.Hour, tempDate.Minute, tempDate.Second);
}