發表文章

目前顯示的是 2013的文章

設計共用類別Transaction慎重使用

最近在設計一個較複雜的邏輯控制類別,因為內部較多SQL的存取所以為了方便起見,就在該類別所提供的Method當中包了Transcation,且在該Method的最後安插了一個Event(在尚未Commit之前)給使用者調用。 但這樣的設計上本身存在著一些陷阱,因為你無法預防使用者會如何使用你公開的Method,最近就遇到一個使用方式。 使用者在自己的Method內包了一層Transcation,在呼叫Component公開的Method,結果就發生了Timeout的事情,由這個經驗可以告訴我們,若再設計給其它第三者的API時,必須多考慮其它可能的使用方式。

NET產生PDF

圖片
NET本身沒有提供產生PDF的API,但在實務上不免會遇到需要產生PDF檔案的情況,因此網路上有人分享綜多產生PDF的方法,其中最常見的就是透過 iTextSharp 來產生PDF。但iTextSharp固然好用,但產生PDF必須透過程式的寫法來決定PDF各文字的位置,這憑空想像沒有視覺畫介面來輔助,在開發效率上實在是有點差,雖然網路上有人使用HTML來產生PDF,但確會有字型無法呈現等問題。 好加在NET本身雖然沒有辦法產生PDF,但是確可以透過ReportViewer控制項來達成這樣的需求,透過rdlc先拉好要呈現的報表畫面,再透過程式將資料來源將資料塞入報表中,就可以輕易的產生出PDF檔,要使用此功能必須先安裝【 Microsoft 報表檢視器 2010 可轉散發套件 】,下面我就大概說明一下要如何開發簡單的PDF下載。

SQL正負數排序問題(腦殘文)

圖片
今日再寫一個批次匯入的作業,有個需求是當更新時間一樣的時候,要判斷欄位的大小來決定排序的方式,而我想要的排序方式是當正數時遞減排序,當負數的時候遞增排序。先看一下我的資料結構如下圖。

DataTable幾種讀取資料的效能比較

圖片
DataTable迴圈的讀取方式一般常見的有for、foreach、 DataTableReader 這幾種,這三種方法各自運用或考量點會根據當時的狀況不同使用的方式也不同,因此這裡只是單純的進行三種方式的效能比較。 下圖為實際比較的結果,從數據上看在資料量少的時候,使用for迴圈再效能上是最優異的,但隨著資料量越來越大,foreach迴圈的優勢就慢慢顯現出來了,DataTableReader的效能則是最差的,但實際的使用情境還是要視情況來自行決定了。

GoogleMap API v2再見

Google 正式宣布 2013.11.19停止支援GoogleMap API v2的版本,全面迎向API v3,R.I.P~,不過也就是這樣先前使用舊版API v2的程式將全部失效。v3和v2的版本再程式上的寫法有很大的不同,所以幾乎沒有辦法調整些許的JavaScript語法就可以直接套用,至於修改了哪些部份就不在一一說明。

程式中使用ReportingService發送報表

圖片
Reporting Service一直不是我的強項,但最近因為需要發送一個報表給大老闆,因此稍為查看了一下Reproting報表的發送方式,意外的發現了一個先前自己都沒有用過的方式,一般而言,我們在使用報表伺服器來設定發送電子郵件都是使用訂閱的方式來傳送(下圖所示)。

Application閒置過久關閉

好久沒有寫網誌了,感覺這裡都快要生蜘蛛網了,今天朋友問了如何判斷一個WindowsForm表單閒置過一定的時間後,自動關閉程式,原本想說使用Form MouseMove & Form Click兩個Event加上Timer來判斷,時間到了自動關閉,但後來確發現要是Form上面有一個很大的Component占據了Form的頁面,這時候Form的Event將抓取不到。 後來發現Application本身有提供一個 Event Idle ,Idle本身在表單停止任何動作的時候會進入一次,如此一來就可以搭配Timer來處理關閉程式的動作了,相關程式碼如下,不過這裡還有一個地方需要注意, Timer在執行的過程中並不算系統Idle ,因此我下面的代碼做了點手腳,在Timer檢查的時候判斷的時間點要比Idle的時間點還要早100毫秒,這樣就可以巧妙的通過檢查了。

開發iOS後的一些感觸

首先,我必須承認我是一個Microsoft派的Programmer,且我是站在開發者角度來觀察,因此我的感觸可能會有些偏頗。 在還沒有接觸之前都只是從賈伯斯和User的說法來得知Apple的產品,他們口中的Apple的產品幾乎就是一個美感、高品質、高效能的代表。甚至幾年前我還從網路的文章中看過一段對話,A問:為什麼Apple電腦沒有防毒軟體? B答:因為麥金塔本身就是最佳的防毒軟體。