asp.net 在GetDateTime时发生Oracle数据读取器错误

vdzxcuhz  于 2022-11-19  发布在  .NET
关注(0)|答案(2)|浏览(151)

我有一个特定的数据行,当我试图读取特定的日期列时,它会引发此错误-“Year、Month和Day参数描述了一个不可表示的DateTime”。
我正在拉入几百行数据,除了这一行之外,它们都正常工作。我可以从这一有问题的行中拉入除这一个datetime列之外的其他列。我正在使用oracle数据读取器从数据库中获取datetime,我可以使用Visual Studio中的监视工具检查要读入的行。我试图读入一个日期时间,并具有它的所有属性。

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我已经在watch工具尝试读取该columnx 1c 0d1x之前的状态中添加了该工具的屏幕截图

zpjtge22

zpjtge221#

我怀疑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);
}
k7fdbhmy

k7fdbhmy2#

我也在与这个问题作斗争。在我的例子中,我正在从一个旧的Oracle DB中阅读一个DateTime?字段,它以dd MMM yy HH:mm提供给我,这会使我的C#代码出错。
我的解决方案如下...

if (!reader.IsDBNull(7))
{
    CultureInfo enGB = new CultureInfo("en-GB");
    var od = reader.GetString(7);

    if (DateTime.TryParseExact(od, "dd MMM yy HH:mm", enGB, DateTimeStyles.None, out DateTime result))
    {
        theDateTimeValueYouNeed = result;
    }
}

相关问题