【问题标题】:Converting DateTime to Datetime? (null-coalescing?) [duplicate]将日期时间转换为日期时间? (空合并?)[重复]
【发布时间】:2020-04-02 02:42:56
【问题描述】:

我有一个小问题。在我的数据库中,我的 DateTime(?) 的自动属性为 null。我正在使用具有 DateTime 属性的类 RentalDTO()?归期。像这样的:

    public class RentalDTO
    {
        public DateTime? ReturnDate { get; set; }

        public RentalDTO()
        {

        }
        public RentalDTO(DateTime? returnDate)
        {
            ReturnDate = returnDate;
        }

问题。如何使用我的 sql 阅读器将我的数据库 DateTime 转换为我的 RentalDTO DateTime?

public RentalDTO RentalDTOFromMySqlDataReader(MySqlDataReader reader)
        {
            RentalDTO rental = new RentalDTO(
                Convert.ToDateTime(reader["returndate"]) // How to convert this? Convert.ToDateTime Does not work
                );

            return rental;
        }

Convert.ToDateTime 不起作用。它给出了一个错误。

【问题讨论】:

  • 为什么不告诉我们,reader["returndate"] 实际上是什么,它不是有效的日期时间
  • “Convert.ToDateTime 不起作用”并没有真正告诉我们任何事情。 “它给出了一个错误” - 那么错误是什么?在编写 Stack Overflow 问题时,请尝试预期任何明显的更多信息请求。想象一下,你试图帮助某人,他们说他们的代码出错了。你明显的第一个问题不是“有什么错误”吗?
  • reader.GetDateTime("returndate") 可能是第一个解决方案...
  • @JonSkeet 我会在下一篇文章中记住它,谢谢你的提示。
  • 您无需等待下一篇文章 - 您可以编辑 this 问题来大幅改进它。

标签: c# mysql


【解决方案1】:

您应该检查reader["returndate"] 是否为null。然后将值转换为 Nullable Datetime

public RentalDTO RentalDTOFromMySqlDataReader(MySqlDataReader reader)
{
    DateTime? dateTime = string.IsNullOrEmpty(reader["returndate"]) ? (DateTime?)null : DateTime.Parse(reader["returndate"]);
    RentalDTO rental = new RentalDTO(dateTime);
    return rental;
}

【讨论】:

    【解决方案2】:

    非常抱歉,我会在评论中输入这个,但我还不允许写 cmets,但我的猜测是尝试使用 DateTime.TryParse(); 并指定日期格式,可能字符串在无效的格式,不是吗?它也可以处理 null。

    【讨论】:

      猜你喜欢
      • 2011-10-09
      • 2012-08-14
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 2012-02-27
      • 2014-07-01
      相关资源
      最近更新 更多