You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除DateTime中的时间:DataTable取SQL DateTime后文本框显日期遇编译错误

解决DataTable DateTime转日期格式字符串的编译错误

这个问题我日常开发里碰到过好多次,核心原因其实很直观:你从DataTable的行中取出的dtbl.Rows[0]["Safetyexpirydate"]是object类型,而.NET里object的ToString()方法根本没有接受格式参数的重载,这就是编译器报错的根源。

要解决这个问题,关键是先把object类型的取值转换成DateTime类型,再调用带格式参数的ToString()方法。下面给你几种实用的解决方案:

  • 直接强转(适用于确定字段值不为空且是DateTime类型的场景)
    直接把object强转为DateTime,再格式化:

    // 注意:你原来的格式字符串写的是"dd/MM/yyy",应该是"dd/MM/yyyy"(4个y)
    txtexpiry.Text = ((DateTime)dtbl.Rows[0]["Safetyexpirydate"]).ToString("dd/MM/yyyy");
    
  • 使用Convert.ToDateTime(容错性稍好)
    如果字段值是可转换为DateTime的其他类型(比如数据库里存储的字符串日期),用Convert.ToDateTime会更稳妥:

    txtexpiry.Text = Convert.ToDateTime(dtbl.Rows[0]["Safetyexpirydate"]).ToString("dd/MM/yyyy");
    
  • 处理DBNull的情况(如果字段允许为空)
    要是数据库里这个字段允许为NULL,一定要先判断是否为DBNull.Value,避免运行时抛出异常:

    var expiryDateObj = dtbl.Rows[0]["Safetyexpirydate"];
    if (expiryDateObj != DBNull.Value)
    {
        txtexpiry.Text = ((DateTime)expiryDateObj).ToString("dd/MM/yyyy");
    }
    else
    {
        txtexpiry.Text = string.Empty; // 或者自定义提示文本,比如"无过期日期"
    }
    
  • 严谨的类型检查(用TryParse)
    如果你不确定字段值的合法性,用DateTime.TryParse做校验,避免转换失败抛出异常:

    if (DateTime.TryParse(dtbl.Rows[0]["Safetyexpirydate"].ToString(), out DateTime expiryDate))
    {
        txtexpiry.Text = expiryDate.ToString("dd/MM/yyyy");
    }
    else
    {
        txtexpiry.Text = "无效日期"; // 转换失败时的提示
    }
    

内容的提问来源于stack exchange,提问作者Kelvin Ong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:26:15