首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

VS2012 計算時間差並計費:空值異常排查與 DateTime 處理最佳實踐

     編輯:程式設計疑難解答

用戶截圖模糊,但「值不能為空」異常通常源于 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.Value
  • 使用 Convert.ToDateTime() 而非直接強轉,前者能處理 null
  • 日志記錄關鍵變量值,定位第一個 null 來源

請補全清晰代碼以獲取精準修正方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved