将GetDateTime转换为仅时间格式:解决ASP.NET与数据库类型转换异常
解决方案
异常原因
SQL Server的Time(7)数据类型对应.NET中的TimeSpan类型,而非DateTime类型,直接调用GetDateTime()读取会触发类型转换异常。
修复读取逻辑
方法一:直接用GetTimeSpan()读取
修改代码中的时间读取逻辑,先获取TimeSpan值再转换为目标格式:
SqlDataReader reader = command.ExecuteReader(); if (reader.HasRows) { while (reader.Read()) { EventModel events = new EventModel(); events.Id = reader.GetInt32(0); // 读取TimeSpan并格式化为HH:mm TimeSpan startTimeSpan = reader.GetTimeSpan(1); // 若EventModel.StartTime是字符串类型,直接赋值格式化结果 events.StartTime = startTimeSpan.ToString(@"HH\:mm"); // 若EventModel.StartTime是DateTime类型,需结合基准日期(比如当天) // events.StartTime = DateTime.Today + startTimeSpan; returnList.Add(events); } }
方法二:通过字符串读取转换
如果遇到驱动兼容性问题,可先读取为字符串再转TimeSpan:
SqlDataReader reader = command.ExecuteReader(); if (reader.HasRows) { while (reader.Read()) { EventModel events = new EventModel(); events.Id = reader.GetInt32(0); string timeStr = reader.GetString(1); TimeSpan startTimeSpan = TimeSpan.Parse(timeStr); events.StartTime = startTimeSpan.ToString(@"HH\:mm"); returnList.Add(events); } }
格式说明
- 使用
@"HH\:mm"输出24小时制的小时和分钟(如14:30) - 使用
@"hh\:mm"输出12小时制的小时和分钟(如02:30)
内容的提问来源于stack exchange,提问作者NateUser
相关产品推荐
相关产品推荐

