【问题标题】:Can't convert DateTime to string in C#无法在 C# 中将 DateTime 转换为字符串
【发布时间】:2021-03-13 05:10:03
【问题描述】:

您好,我正在尝试进行预订页面。如果有人进行预订,该日期将保存在数据库中,并且也会显示在他们的页面上。 'dayid' 列的类型是 postgresql 中的日期。在剃须刀页面 C# 中,我使用 DateTime 类型作为变量 Dayid。我需要将数据库中的 dayid 值转换为字符串。但我不知道如何解决这个错误: “方法 'ToString' 没有重载需要 1 个参数” 这是代码

public List<ReservationModel> ShowReservation()
        {
            var cs = Database.Database.Connector();
            List<ReservationModel> res = new List<ReservationModel>();
            using var con = new NpgsqlConnection(cs);
            {
                string query = "Select dayid, locationid FROM reservation";
                using NpgsqlCommand cmd = new NpgsqlCommand(query, con);
                {
                    cmd.Connection = con;
                    con.Open();
                    using (NpgsqlDataReader dr = cmd.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            res.Add(new ReservationModel { Dayid = dr["dayid"].ToString("MM/dd/yyyy"), Locationid = dr["locationid"].ToString() });
                        }
                    }
                    
                    con.Close();
                }
            }


            return res;
        }

【问题讨论】:

  • dr["david"] 是什么类型的?
  • 尝试将 dr["dayid"] 分配给一个变量并仔细检查它是否是一个日期时间。很可能是对象。我会在调用 ToString 之前将其转换为 DateTime 以便能够使用格式化参数。还要考虑从模型中获取 DateTime 并避免强制转换的可能性。
  • 我怀疑问题出在dr["dayid"] 将值装箱,所以您实际上是以object 访问它。
  • 好吧,我尝试在 while 循环上方执行 DateTime Dayid = dr["dayid"] 但它告诉我无法将对象转换为 System.DateTime

标签: c# postgresql .net-core type-conversion razor-pages


【解决方案1】:

NpgsqlDataReader 索引器的编译时类型只是objectobject.ToString() 方法是无参数的。您需要DateTime 类型的表达式来调用您想要的ToString 重载。

可以改为DateTime

while (dr.Read())
{
    res.Add(new ReservationModel
    {
        Dayid = ((DateTime) dr["dayid"]).ToString("MM/dd/yyyy"),
        Locationid = dr["locationid"].ToString() 
    });
}

(或者找到列索引并调用dr.GetDateTime(...)。)

但是,我鼓励您更改模型 (ReservationModel) 以将值 as 保留为 DateTime,而不是此时将其转换为字符串。一般来说,最好尽可能多地将数据保持在最自然的数据类型中,只在边界处将其转换为文本或从文本转换。

【讨论】:

  • 您好,我尝试了您的代码,但随后出现此错误:无法将类型“字符串”隐式转换为“System.DateTime”
  • @anonD:我是假设你的Dayid属性是string类型,给定你之前的代码。不是这样吗?也许它已经DateTime?在这种情况下,你为什么要打电话给ToString
  • 是的,reservationmodel 中的变量 DayId 是 DateTime 类型。因为在数据库中该列的类型是日期。我希望这个日期显示在页面上,这就是我希望它转换成字符串的原因。
  • @anonD:因此您需要稍后转换为字符串。您不能将string 分配给DateTime 属性,最好不要这样做。在您的 ShowReservation() 方法中,您应该只转换为 DateTime,例如Dayid = (DateTime) dr["dayid"],然后在您的视图中执行适当的文本转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
相关资源
最近更新 更多