Category: .net

前幾天學到新知識 - SQL 的 DateTime 型別雖然可顯示到毫秒(0.001秒),但精確度非 0.001 秒,最後一位會取相近值到 0, 3, 或 7。 想起過去曾遇過時間資料存入 SQL 比對失敗的經驗,當時不知其所以然,也忘了最後怎麼解決,猜想跟此一特性有關。決定做個實驗釐清觀念,強化記...

近幾年來,網站全面改用 HTTPS 加密傳輸已是業界共識,違者會被 Google 調降搜尋結果排名,被 Chrome 在額頭刺上【不安全】。同樣的,檔案傳輸協定 FTP 如不升級成加密版 SFTP,也一樣會被資安單位盯上要求改善。過去寫過 C# FTP 上傳、下載範例,如今也該與時俱進,研究一下 C...

某套老系統在新裝的測試環境噴出 SQL String or binary data would be truncated. (字串或二進位資料會被截斷) 錯誤。 詭異之處在於:引發錯誤的輸入內容很簡短,想不出有超出 VARCHAR 長度的可能,加上該系統運作了十多年,第一次在這個環節遇到字串過長被截...

工作上有愈來愈多需要加密壓縮的場合,過去我慣用的做法是從 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...