Oracle DataReader在GetDateTime上出错

时间:2017-07-25 21:28:23

标签: c# asp.net oracle datareader

当我尝试读取特定日期列时,我有一个特定的数据行抛出此错误 - "年,月和日参数描述了一个不可表示的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,它们仍然会抛出相同的错误。

我尝试阅读的日期时间值为:6/7/2017 5:16:41 PM 我在试图阅读该列enter image description here

之前的状态中包含了该手表工具的屏幕截图

1 个答案:

答案 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);
}