Category: .net

工作上有愈來愈多需要加密壓縮的場合,過去我慣用的做法是從 C# 呼叫外部程式,借助 7z.exe 完成任務。不方便之處是我必須先將要打包加密的內容依目錄結構寫成暫存檔,再交給 7-Zip 處理,且做完必須刪檔抹去足跡。這裡隱藏一個危機,若程式在寫暫存檔到刪檔前出錯,便可能殘留明文內容,有資訊外流風險...

使用者通報某網頁無法開啟,錯誤訊息為 SQL 查詢發生 Timeout,由錯誤行數推論查詢指令為單純的 SELECT * FROM MyTable WHERE PK = @id。進一步測試並確認問題只出在 MyTable 特定一筆,@id 換成其他值就是正常的。還有一點奇怪的地方,另一個網頁也是查詢...

工作上的小需求,監控系統定期發送 PDF 報表,回報像下面的主機監控數據。 覺得每天重複收信開 PDF 檔用肉眼檢查很蠢,但監控系統不在轄區沒法要求其他格式,怎麼辦? 幸好,我們可是會寫程式的人呢,不怕不怕。 先寫一隻小程式檢查 Outlook 收件匣依主旨特徵挑出監控系統報表,從中取出 PDF ...

最近寫到內容維護 UI,想留下資料修改軌跡。除了保留修改前修改後的完整內容,我還想出一份簡單的差異報告,指出哪幾行有更改,增加了哪幾行、哪幾行被刪除... 等,方便一眼看出變更重點;甚至不必保留舊版,用最新版加差異報告便能一路反推完整修改歷程,大量節省儲存空間。思考這個需求時,我想到 Git dif...

產生文字檔或顯示純文字時會蠻常遇到類似:呈現多欄資料,文字靠左,數字靠右,每一欄寬度固定,字串長度不足時補空白至指定寬度。(例如下面這個例子) 分享我以前的笨寫法 - 自己寫一個輸出固定長度字串的函數,傳入字串(或數值)、欄位寬度並指定左靠或右靠,函數負責補足空白: class Program {...

分享這幾天寫程式學到的 System.Reflection 小技巧一枚:使用 Type.GetMethod() 於執行期間取得類別的靜態方法,方法包含選擇性參數。以強型別呼叫,選擇性參數可省略不寫,.NET 會帶入預設值;但透過 MethodInfo.Invoke() 呼叫時,object[] 參數...

分享 .NET 老鳥前陣子犯下的低級錯誤 - 字串比對結果與預想不同,還因觀念不清迷惑好一陣子(羞)。 故事是這樣的,先前知道 Dapper 查詢所傳回的 dynamic 底層型別是 DapperRow,並可轉型成 IDcitionary<string, object>方便動態指定欄位處...

不小心瞄到網路文章,驚奇發現: 2018 年 7 月發生一件大事,VB.NET 在 TIOBE 程式語言排行榜的排名首次超越 C#。 五個月後,VB.NET 更上層樓破天荒擠進前五名來到歷史高點。 雖然上個月(2019 年 7 月) C# 再次超越 VB.NET 奪回第五名寶座,結束為期一年的 VB...

這幾天在寫 WinForm 程式,遇到有意思的需求。小程式透過 Registry Shell/Open/Command 註冊方式啟動(類似在 Chrome/Edge 網頁用 IE 開啟超連結所介紹的技巧),以 MyApp.exe %1 方式接收參數執行任務。 這裡用個簡化範例模擬我遇到的挑戰。 Pr...

今天踩了個低級錯誤的雷,分享一下。 網頁上有個欄位輸入預期執行日期時間,後端檢核時需比對不得早於現在時間,前端傳入的 JSON 已轉為 UTC,例如在 7/25 選明天(7/26), 會得到 "2019-07-25T16:00:00Z",用 JsonConvert.Deseria...

最近的 Coding4Fun 專案是練習用 Razor Pages 寫英文單字測驗網站,其中有個情境是每次測驗時可選擇涵蓋難度等級、是否只顯示打星號的單字、是否略過已記住的單字,最後產生一組單字清單當成題庫。 為了方便能用相同字庫重新測驗一次比較成績,系統要保留完整單字清單及每題選擇題選項確保測驗基...

今天來介紹一則私房小技巧,能讓 C# 的複雜型別屬性與資料庫欄位無縫接軌,抱著「花盆種出葱請朋友來家裡吃飯品嚐」的心情分享給大家。 舉個實例說明應用情境。假設我有個 C# 資料型別長這樣,其中包含一些非基礎型別(Primitive Type)屬性,像是自訂列舉、int[] 及自訂物件陣列(Medal...

Managed ODP.NET 讓 .NET 程式擺脫對 Oracle Client 的依賴, 對常被 11.2 或是 12.1?32 或 64 bit 等版本鬼問題糾纏過的人就知道這點有多好, 故除非專案有不得已的限制,Managed ODP.NET 成為我寫 Oracle 相關 .NET 程式的...