移除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
相关产品推荐
相关产品推荐

