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

C# 解壓文件後數據入庫失敗的排查思路

     編輯:程式設計綜合問答

現象描述

上傳壓縮包(.rar),服務端解壓後解析 Shapefile,讀取 DBF 數據寫入 SQL Server,但 `dbfFileDataList` 始終為 null,導致入庫失敗。

核心排查步驟

  1. 驗證解壓結果:檢查 `deCompressFilePath` 目錄下是否確實生成了 `.shp`、`.shx`、`.dbf` 文件,文件大小是否正常。
  2. 獨立測試解析邏輯:編寫獨立控制台程序,直接讀取已解壓的文件,排除 Web 環境干擾。
  3. 檢查文件編碼與結構:DBF 文件可能存在編碼不匹配(如 GBK vs UTF-8)、字段定義異常導致解析器返回空集合。
  4. 異常捕獲與日誌:在 `readDbfile()` 內部添加 try-catch,記錄具體異常堆棧,而非僅返回 null。

常見原因與對策

  • 解壓庫版本不兼容:確認 `OperateZipFile.UnRar` 支持該 RAR 版本,建議改用 `SharpCompress` 等成熟庫。
  • 路徑拼接錯誤:`Path.Combine` 參數順序、目錄分隔符導致實際讀取路徑錯誤。
  • 權限問題:ASP.NET 執行身份對解壓目錄無讀寫權限。

代碼改進建議


// 增加解壓後文件存在性檢查
var dbfPath = featureShapeFileParse.getDbfPath(deCompressFilePath);
if (!File.Exists(dbfPath)) {
    Log.Error($"DBF 文件不存在: {dbfPath}");
    return;
}

C# 解壓 Shapefile 後 DBF 讀取為 null,排查解壓完整性、解析器異常、文件編碼與權限問題。

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