May, 2025
因 DateTime.Now 而當機:EF Core 寫入 timestamptz 的致命陷阱
以下是一篇以部落格形式撰寫的技術分享,用來說明「為什麼用原生 SQL 傳入 DateTime.Now 不會出問題,但透過 Entity Framework Core(EF Core)卻會拋出 Kind=Local 到 timestamptz 的異常」,並給出三種解決方案。 EF Core 與原生 Npgsql 在 DateTime 映射上的差異 ...
2025-05-15 08:25:53 | 2 reads
WinForms 非同步必學:用 async/await 擺脫 UI 卡頓
背景 在按鈕事件中若直接執行同步 I/O(如 ToList())或耗時計算,會鎖死 UI,畫面無法拖曳、重繪,甚至被系統標示為「(無回應)」。 1. await 的核心作用 分段執行 遇到 await 時,方法會將後續程式拆成 callback,先把控制權還給 WinForms 的訊息迴圈。 保證順序 有 await,後續程式碼僅在被 await 的 Task 完成後才執行;若忽略 await,便可能「fire-and-forget」 ...
2025-05-15 07:01:39 | 1 reads
📊 用 ClosedXML 讀取三行合併表頭的 Excel 資料(含欄位名稱查找技巧)
在處理 Excel 檔時,表頭不一定總是單行的。有些報表的表頭可能會長成這樣: | 資産情報 | 担当者 | | | 氏名 | 年齢 | | | 氏名 | 年齢 | 這樣的三行表頭、跨列合併,對程式來說根本就是「惡夢」。 你想做的事可能很簡單: 根據「欄位名稱」去讀取對應的資料列,比如 "担当者 > 氏名 > 年齢"。 但 ClosedXML 並不會自動幫你解析這種結構,我們要自己動手,把「表頭→欄位編號」的對照表建立出來 ...
2025-05-08 11:04:25 | 4 reads
我在用 Npgsql 搭配 EF Core 遇到的超大陷阱:UseSnakeCaseNamingConvention() 根本不存在!
我在使用 Npgsql.EntityFrameworkCore.PostgreSQL 搭配 Entity Framework Core 開發 PostgreSQL 專案時,想讓 KobetuCd 這類 C# 屬性自動對應資料表中的 kobetu_cd 欄位。網路上許多文章提到 .UseSnakeCaseNamingConvention(),說加上就能解決命名不對應的問題。 結果我死命找都找不到 UseSnakeCaseNamingConvention(),查了半天才發現這個方法根本不屬於 Npgsql,而是來自另外一個社群套件 ...
2025-05-07 08:49:21 | 4 reads
🛠️ PostgreSQL Backup/Restore Tool 使用介紹
本工具是一套圖形化介面的 PostgreSQL 備份與還原工具,支援標準 SQL(Plain SQL)與自訂格式(Custom Format)的備份與還原作業,適用於資料庫管理員與開發人員日常維護作業 ...
2025-05-02 06:03:47 | 2 reads
.NET 8 WinForms 使用 PostgreSQL + LINQ 實例教學
如果你正在啟用 .NET 8 WinForms 對 PostgreSQL 執行 LINQ 操作,這篇簡明教學就是為你擾備的。 ᵀ. 安裝 NuGet 套件 打開 NuGet 套件管理器,執行: dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL ᵁ. 建立 DbContext 新增 BKDbContext.cs ...
2025-05-02 01:44:18 | 2 reads
物品管理系統資料操作邏輯分析 - 管理換(受)済
【操作說明:供用官執行「管理換(受)」承認】 🔍 條件篩選 從 kanrigae_tbl 中查找符合以下條件的記錄: shori_sts = 51(處理狀態為「受理中」) seiri_kbn = 151(整理區分為「管理換(受)」) r_kyouyoukan_cd = current_op_cd(所屬供用官為當前使用者) 從符合條件的記錄中選出 一筆 doc_cd 作為本次操作對象。 ⚠️ 注意事項 本次操作屬於 供用官承認處理。 以下為對應資料表的更新與插入操作 ...
2025-05-02 00:38:16 | 1 reads
物品管理系統資料操作邏輯分析 - 管理換(受)
管理換(受)資料更新流程(由管理官執行) 【查詢條件】 從 kanrigae_tbl 中,查找符合以下條件的記錄: shori_sts = 12 seiri_kbn = 151 r_kanrikan_cd = 當前操作員編號(current_op_cd) 自查詢結果中挑選一筆 doc_cd,作為此次「管理換(受)」的處理對象。 【更新內容】 🔹 表:kanrigae_tbl(共 4 項更新) 將 r_kanri_doc_no 更新為使用者輸入值 將 shori_sts 狀態由 12 更新為 51 將 upd_op_cd 設為當前操作員編號(current_op_cd) 將 upd_ymd 設為當前日期 ...
2025-05-02 00:08:37 | 3 reads