用戶截圖模糊,但「值不能為空」異常通常源于 DateTime 字段未賦值直接參與運算。C# 中 DateTime 是值類型,不可為 null,除非用 DateTime?。
DateTime start, end; // 未初始化,默認 0001/1/1 0:00:00
// 若從數據庫讀取 DBNull.Value 直接轉換會拋異常
TimeSpan diff = end - start;
decimal fee = (decimal)diff.TotalHours * rate;
// 1. 數據庫讀取安全轉換
DateTime? start = reader["start_time"] as DateTime?;
DateTime? end = reader["end_time"] as DateTime?;
if (start.HasValue && end.HasValue) {
TimeSpan diff = end.Value - start.Value;
decimal fee = (decimal)diff.TotalHours * rate;
} else {
// 處理缺失邏輯:拋出友好提示、記錄日志、默認值
}
DBNull.ValueConvert.ToDateTime() 而非直接強轉,前者能處理 null請補全清晰代碼以獲取精準修正方案。