🛠【ASP.NET Core + Oracle】解決 ORA-00904 "FALSE": 無效的 ID 錯誤與資料欄位動態插入顯示問題
🔍 問題描述 在開發群創光電內部的 APS 排程系統(使用 ASP.NET Core + Vue 3 + Oracle),前端發生多筆錯誤訊息: Request failed with status code 500 Oracle.ManagedDataAccess.Client.OracleException: ORA-00904: "FALSE": 無效的 ID 這是 Oracle 資料庫對布林值處理不一致造成的錯誤,我們後端嘗試將某個欄位 .Where(x => x.FLAG == false) 寫法,經由 EF Core 轉成 SQL: SELECT * FROM TABLE WHERE FLAG = FALSE 而 Oracle 並不支援 FALSE 關鍵字作為布林值 → 導致查詢失敗。 🔧 解決方案 1:避免布林值直接進入 LINQ to SQL EF Core + Oracle 不支援下列語法: .Where(x => x.IsActive == false) // ❌ Oracle 無法解析 FALSE ✅ 解法 :將布林判斷移至 .ToList() 之後,變成記憶體篩選: var list = await db.Table.Where(x => x.Version == ver).ToListAsync(); var filtered = list.Where(x => !x.IsActive).ToList(); // ✅ 在記憶體中比對布林 🔧 解決方案 2:安全轉換 SEQ_NO 為 Decimal 後端為了將前段表 APSZFRONT 的 SEQ_NO 與 APSZLCM 的 APS_PLAN_SEQ 對應,用到了這段程式碼: Convert.ToDecimal(front.SEQ_NO) 但一旦 SEQ_NO 含有英文字母(例如 GN140CHCAAE90S_20250811_1_531 ),就會丟出 FormatException → 造成 HTTP 500。 ✅ 正確寫法(TryParse 避免失敗) : de...
留言
張貼留言