Browse by Tags

實戰小技巧 - .NET Exception Message、InnerException 與 ToString()
前篇文章 提到 try catch 時若只保留 Exception.Message,可能遺失 InnerException 及 StackTrace 錯失破案重要線索。文章迴響顯示這是個值得介紹的實戰技巧,故再補充一篇。 在某些應用情境我們會選擇使用 try … catch 達成特定目的,例如:(註:Exception 的官方翻譯為例外狀況,這裡容我用較口語化的「錯誤」取代) 捕捉可預期錯誤,進行補救並繼續執行程式 例如:發現作業失敗時,Rollback 交易、寫 Log、通知管理員、退回前一步驟請使用者再試一次...
Posted 12 February 2018 09:06 PMJeffrey | 4 comment(s) 2,399
Filed under: ,
【茶包射手日記】老 Bug 新感受之 ODP.NET 版本問題
同事報案。某個使用 Managed ODP.NET 的測試網站吐出以下錯誤 Error: The type initializer for 'OracleInternal.Common.ProviderConfig' threw an exception. 同事一度懷疑跟 ODP.NET 版本有關,但依經驗,如為版本問題錯誤訊息會確指出所需元件全名、版號等資訊。為調查問題,我直接在 IIS主機 現場撰寫 Tets.aspx 偵錯 ,測試程式一用到 new Oracel.ManagedDataAccess...
Posted 10 February 2018 08:15 AMJeffrey | with no comments 1,335
Filed under: ,
使用 Razor 產生客製化 Email 內容
多年下來,寫程式發 Email 通知的需求做過 N 回,其中寄給客戶的通知為求美觀常需採用 HTML 格式,而客戶姓名、通知內容等要隨客戶動態改變,嚴格來說也是一種套表。過去我慣用一套自己發明的「特別註記+Replace」做法,例如: var tmpl = "<span>[$Name$]</span> 您好,您的等侯順位為<span>[$SeqNo$]</span>" ; var dict = new Dictionary<...
C# 讀取 dbms_output 效能強化版
前文 介紹過使用 C# 讀取 dbms_output 寫入內容,範例留了一個小尾巴,跑迴圈連資料庫犯了效能大忌,應改成一次執行或查詢取回才上道。 dbms_output.get_lines() 允許一次取得多筆訊息,但傳回型別為 TYPE DBMSOUTPUT_LINESARRAY IS VARRAY(2147483647) OF VARCHAR2(32767); 讀取要費點手腳,Oracle 生手經過一番研究,試出四種不同做法,就當練功吧。 使用 ODP.NET OracleParameter...
Posted 12 January 2018 10:32 PMJeffrey | 1 comment(s) 2,544
Filed under: ,
TIPS - C# 讀取 Oracle dbms_output.put_line 輸出資訊
使用 dbms_output.put_line() 列印執行資訊是常用的 Oracle Stored Procedure 偵錯技巧,以下 Procedure 範例在DELETE 及 INSERT 後透過 dbms_output.put_line() 印出影響資料筆數,概念跟在程式碼裡塞入一堆 Debug.Print、MsgBox、alert() 差不多,是執行期間追查問題的重要線索: create or replace procedure JeffDBJobTest1 is begin delete...
Posted 12 January 2018 07:01 AMJeffrey | with no comments 2,114
Filed under: , ,
野人獻曝 - 極簡風格 .NET Stopwatch 計時法
在 .NET 要測量執行時間,Stopwatch 是最簡單直覺的做法,像這樣: Stopwatch sw = new Stopwatch(); sw.Start(); //...執行要測試的動作 sw.Stop(); //將測得秒數輸出到Console、Debug或Log檔 Console.WriteLine($ "Time={sw.ElapsedMilliseconds:n0}ms" ); 說起來不複雜,但一但測量對象變多,專案將充斥大量 Stopwatch 建立、開始、結束以及記錄時間的程式碼...
Posted 09 January 2018 08:41 PMJeffrey | 6 comment(s) 5,025
Filed under: ,
除蟲筆記 – Thread 執行時機與 Closure
同事的 .NET 程式抓到一隻有趣的 Bug。以範例程式重現如下: static void DoProcess( int idx) { while (StartFlag) { Thread.Sleep(1000); Console.WriteLine( $ "{DateTime.Now:mm:ss} Thread {idx} is running." ); } } static void Main( string [] args) { for ( int i = 1; i <...
Posted 20 December 2017 08:39 PMJeffrey | with no comments 3,799
Filed under:
RSA 非對稱金鑰加解密與數位簽章筆記
用 .NET 加解密已是老生常談,.NET 內建 MD5、SHA1、RSA、AES、DES... 等雜湊及加密演算法,寫來易如反掌,網路上的文章也很多。但沒有自己整理過一次,每回要用都要爬文找半天。有些基本功不能省就是不能省,所以,我的 RSA 私房筆記來了。 程式範例 1 包含:產生隨機 RSA 金鑰、匯出公私鑰、對一小段文字加密、產生數位簽章。第二階段則包含匯入私鑰、解密加密內容、驗證數位簽章,並試著偷改內容驗證簽章是否因此失效。 static void RSAEncDec() { //建立RSA公私鑰...
Posted 17 December 2017 05:11 AMJeffrey | with no comments 7,222
Filed under: ,
CODE-C# 程式讀取 Exchange 共用行事曆
工作遇到新需求:辦公室自動化服務希望讀取使用者行事曆,整合顯示於個人資訊頁。 EWS Managed API 封裝了複雜又囉嗦的 Exchange Web Service SOAP 細節,改以 .NET 程式庫形式提供電子郵件、連絡人、行事曆、公用資料夾的存取管道,是 C# 開發 Exchange 相關程式的首選。(意外發現 EWS Managed API 從 2014 起轉為 Github 開源專案 ,有原始碼在手,搞不懂走不通都有救,用起來格外讓人放心,微軟真的愈來愈開放) 官方文件有篇詳細...
Posted 16 December 2017 10:12 AMJeffrey | with no comments 3,544
Filed under: ,
CODE-從 JSON 提取文字內容
從檔案萃取文字部分建立索引是全文檢索的必要程序,先前介紹過 為 PDF、Office 檔案產生文字索引 的做法,實際開發則遇到為 JSON 建立文字索引的需求。借用上回 遞迴文章 的組織資料當實例,假設 JSON 格式如下: { "Name" : "總經理" , "Children" : [ { "Name" : "行政部" , "Children" : [ { "Name"...
Posted 15 December 2017 10:39 PMJeffrey | with no comments 3,869
Filed under: , ,
CODE-使用 Stack<T> + yield 取代遞迴
分享最近學到的遞迴邏輯的替代寫法。 舉個實例比較容易說明,假設公司組織樹狀結構以部門資料物件形式呈現: public class Dept { public string Name; public List<Dept> Children = new List<Dept>(); } 組織架構範例如下: { "Name" : "總經理" , "Children" : [ { "Name" : "行政部"...
Posted 12 December 2017 08:32 AMJeffrey | 1 comment(s) 6,746
Filed under:
MemoryStream 不可擴展錯誤
記錄自己遇到的蠢問題一枚。 抽象類別 Stream 常被當成輸入輸出參數 ,如此資料可以來自檔案、網路、記憶體或使用者自訂來源,還可套用 裝飾者模式(Decorator Pattern)壓縮加密一次完成 ,提供強大彈性。實務上我常應用的情境是 ClosedXML /OpenXML SDK 之類原本要讀寫 Excel、Word 檔案的場合,函式接受檔案路徑或 Stream 以開啟現有檔案。遇到檔案保存於資料庫,取出的資料格式為 byte[],沒必要寫成暫存檔再開啟,我習慣用 new MemoryStream...
Posted 08 November 2017 09:29 PMJeffrey | with no comments 2,789
Filed under:
為 PDF、Office 檔案產生文字索引
遇到文件檔全文檢索需求,打算用 SQL Server 全文檢索或 lucent.net 實現,無論使用何者都免不了從 Word、Excel、PowerPoint 或 PDF 檔萃取純文字內容建立索引的程序。經簡單評估,使用微軟的 IFilter 介面 應是較簡單可行的做法。搜索引擎面對的檔案種類五花八門,不太可能涵蓋各種檔案格式,知道從中取出文字內容的方法,IFilter 制定統一程式介面,不管檔案格式為何,只要廠商或第三方有提供專屬 IFilter,搜尋引擎便可使用呼叫統一的 API 方法傳入檔案名稱取得文字內容...
Posted 24 October 2017 12:57 PMJeffrey | with no comments 3,926
Filed under:
【茶包射手日記】只能跑 32 位元的 AnyCPU .NET 程式
測試某個 COM+ 元件應用專案,開發者所附的範例專案測試成功,我自己新增 Console Application 或 Windows Form 專案則卡在找不到 Registry 無法執行。強烈懷疑與 x86/x64 有關,由於只有註冊 64 位元 COM+,專案跑 x86 找不到 Registry 是意料中事,但詭異之處在於我已確認過範例專案跟我新增的專案都是設 Any CPU 無誤,甚至放在同一個 Solution 測試,卻一個成功一個失敗。 實測將新增 WinForm 或 Console...
Posted 23 October 2017 07:29 AMJeffrey | with no comments 6,685
Filed under: ,
【答客問】ClosedXML 日期資料解析測試
網友 Danny 在舊文留言 提問 關於 NPOI 讀取 Excel 日期,"2017/9/23"被轉成"23-九月-2017"的問題,我已棄用 NPOI 投向 新歡 ClosedXML 多年,沒打算再花時間研究,於是題目改成: 面對相同文件,ClosedXML 能否順利過關? 取得 Danny 提供的測試樣本,挺有趣的,共有四欄(F、G、N、AS)包含日期資料,第一列有欄名分別為A6、A7、A14與A45: 四欄儲存格格式各有千秋,A6 設成自訂 yyyy...
Posted 23 September 2017 04:29 PMJeffrey | 1 comment(s) 3,494
Filed under:
更多文章 下一頁 »

搜尋

Go

<February 2018>
SunMonTueWedThuFriSat
28293031123
45678910
11121314151617
18192021222324
25262728123
45678910
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication