最近玉X銀行一直打電話來找我,說什麼重要的會員權益要通知,只是每次我都剛好在忙,沒空談.

因為找了我很多次,只好隨便跟他講個時間,事後我也忘了這回事.

今天下午就接到他的來電 :

玉X : 先生你好,我是玉X銀行,上次有跟你約時間,現在方便講話嗎?

我 : 恩.....哦.....好吧.
謎之音 : 好像有這麼一回事~

玉X : 先生,你很忙哦,我3點打來的時候,你沒有接電話~

我 : 恩......耶......因為我在大便~


一陣的沈默~~~~~~


玉X : 不好意思,不知道有沒有打擾到你.

我 : 沒啊,想討論我大便的形狀嗎~


又一陣的沈默~~~~~


玉X : 先生,你在XX公司工作很久了哦~

我 : 未滿一年......
謎之音 : 你手上的資料是那來的啊.....

玉X : 像你們科技新貴,百萬年薪都不是什麼問題.

我 : 那你可能找錯了,我是便宜的那一種~你到底找我什麼事~

玉X : 哦,那我們就切入主題吧,我是XXX,代號是ZZZZZZZZ~
謎之音 : 念那麼快,鬼才聽的懂~

我 : 我是北海小英雄,代號是WaterMan995~

玉X : ...............

我 : 到底找我有什麼事,我等一下要去拯救世界~

玉X : (直接忽略我,開始介紹保險) 我們這個終生醫療險,在你停止呼吸那一刻,如果都沒用到保險,你的家屬可以拿回保險金的百分之X~

我 : 如果沒有呼吸,還有心跳怎麼辨~

玉X : .......


這次沈默的有點久......

我 : 保險的事情我不太熟,都是我太太在處理
謎之音 : 因為玩的有點累,該要回頭工作了.


玉X : 先生,你的保険都是太太在處理的嗎?
謎之音 : 聽的出來,鬆了一口氣的感覺~

我 : 是啊,保險的問題請找我老婆~
謎之音 : 這種死纏爛打的推銷員,丟給老婆就對了,因為老婆沒有我一聲OK,都是一路No到底~

玉X : 謝謝哦,不好意思打擾你那麼久,那保險的問題我再找你太太~
(好像終於擺脫我的感覺)

jeffyeh 發表在 痞客邦 留言(0) 人氣()

在下SQL Script,大家都知道使用Parameter來傳入參數會比較安全,但在各種不同的DB使用下,Parameter的符號也會不同.


 


使用ADO.Net for Microsoft SQL


符號 = @


EX :


Select * from testtable where id=@id


 


使用ODO.Net for Oracle


符號 = :


EX :


Select * from testtable where id=:id


補充 :


OracleMS SQL有點不同,如果傳入的值是空字串,Oracle要把它轉為DBNull.Value,MS SQL不用.


cmd.Parameter.Add(“id”,DBNull.Value)


不然會跳出這樣的Exception


Parameter 'id': No size set for variable length data type: String


 


使用ODBC / OLEDB


使用符號 = ?


EX :


Select * from testable where id=?


補充 :


這個可以發現到一點,參數名稱只有符號?,後面沒有參數名稱,那怎麼去對應到Parameter?,它是對應到Parameter.Add的先後加入順序,所以跟加入的順序有關.所以在Add,順序與Script裡的順序要相同.


 


以上的Parameter如果加入的數量與Sql Script裡使用的Parameter數量不同時,是會觸發Exception.


EX :


少傳參數時 :


部份變數未被連結


多傳參數時 :


變數名稱?號碼無效


 


參考 :


SqlCommand.Parameters屬性


OracleCommand.Parameters屬性


Null in Oracle


OdbcCommand.Parameters屬性


OleDbCommand.Parameters屬性

jeffyeh 發表在 痞客邦 留言(0) 人氣()

在很多程式裡都有四捨五入Round的功能,但其四捨五入的結果是否真如預期? 負數的四捨五入是什麼結果?以下用JavaScript / .Net / Oracle /MS SQL /Excel  這幾種語言或工具來看看,結果都是出乎預料之外...


 

正數的四捨五入大都多什麼問題,問題在於負數,負數要怎麼四捨五入? 


 

JavaScript


Math.round(-0.51) = -1


Math.round(-0.5) = 0 ç 竟然沒有進位!


Math.round(-0.49)=0


 


Math.round(0.51) = 1


Math.round(0.5) = 1


Math.round(0.49)=0


 


.Net


Math.round(-0.51)=-1


Math.round(-0.5) = 0 ç 竟然沒有進位!


Math.round(-0.49)=0


 


Math.round(0.51) = 1


Math.round(0.5) = 0 ç 負數沒進位就算了,正數也沒有進位!


Math.round(0.49)=0


 


Oracle


Select round(-0.51) from dual =-1


Select round(-0.5) from dual =-1


Select round(-0.49) from dual =0


 


Select round(0.51) from dual =1


Select round(0.5) from dual =1


Select round(0.49) from dual =0


 


MS Sql


Select top 1 round(-1.51,0) from testable =-2


Select top 1 round(-1.5,0) from testable =-2


Select top 1 round(-1.49,0) from testable =-1


 


Select top 1 round(1.51,0) from testable =2


Select top 1 round(1.5,0) from testable =2


Select top 1 round(1.49,0) from testable =1


: 這時有個怪現象,如果用0.X,會出現錯誤訊息.


錯誤訊息為 : 執行批次時發生錯誤。錯誤訊息為: 算術溢位。


因此,測試數據為1.51 / 1.5 / 1.49…çMS SQL拒算0.X的小數字?


 


Excel


Round(-0.51) = -1


Round(-0.5) = -1


Round(-0.49) = 0


 


Round(0.51) = 1


Round(0.5) = 1


Round(0.49) = 0


 


 


  看了以上的清單後,或許有些人會覺得,怎麼.Net的結果這麼的奇怪,跟我們所認知的四捨五入不同,其實它沒有錯哦,這些只是誤會,MSDN裡可以看到一點,它所遵循的是IEEE Standard 7544,這種捨入有時稱為捨入至最接近值。如果要捨入值為偶數,則捨去,如果為奇數,則進位,有看沒有懂哦,用下列幾個數字來解說一下.


 


0.5 è 0


*因為要捨入值為偶數0,所以捨去0.50


1.5 è 2


*因為要捨入值為奇數1,所以進位0.52


2.5 è 2


*因為要捨入值為偶數2,所以捨去0.52


3.5 è 4


*因為要捨入值為奇數3,所以進位0.54


 


這個就是所謂的四捨六入五成雙(Banker’s Rounding)~


 


那要怎麼做才能達到我們原本預期的四捨五入?


.Net 2.0以上的Math.round多了一個MidpointRounding的參數可以傳入.


MidpointRounding.ToEven [Banker’s Rounding]


MidpointRounding.AwayFromZero [這就是大家小學所熟悉的四捨五入]


用法 :


Math.round(0.5,0,MidpointRounding.AwayFromZero) = 1


 


 


參考 :


MSDN Math.Round 方法


Math.Round 方法 (Decimal, MidpointRounding)


 


jeffyeh 發表在 痞客邦 留言(0) 人氣()

今天收到同事轉寄來的一封信,看完之後,心裡深深的感動~~~

====================我 是 分 格 線====================

第一張 <冷暖相依>
(作者 : 安鶴傑,拍攝於內蒙古赤峰市新華街菜市場)



塞外的春天乍暖還寒。4月的一個早晨,天空飄灑著紛紛揚揚的雪花。
一個中年男子的菜攤車上坐著一個小男孩,孩子用給菜保溫的被子圍著,
父親不時用手給兒子掖掖被子。

作者說:「在陰暗的背景和漫天飛舞的雪花的襯托下,兒子稚嫩紅潤的小臉與父親飽經滄桑的臉形成對比, 父子倆面對生活的艱辛相依為命,特別是父親使勁發出叫賣聲時,臉部表情感人力度之大,使人看後心靈為之震顫。


第二張 <愛>



這就是生活在貧困山區的父子,他們一生別無所求。只求有一塊屬於自己的土地。
也許一輩子他們都不知道外面的世界是什麼樣子。

他們沒上過樓梯,沒打過「計程車」,沒進過電影院,可就是樸實勤勞的人們一代代的供養著我們。皇天后土無以回報。

愛他們吧,至少在感情上尊重他們。否則我們還談什麼人性?


第三張 <爺爺哭了>



這個學期應付過去了,下個學期呢?


第四張  <風雨中>



家中的老母親、稚子還在等你拿錢回家


第五張  <哭泣的老人>



由於沒有執照,老人賣烤紅薯的三輪車被砸壞,車輪鋼線被剪斷,謀生的工具也被
被城管的人沒收。老人哭泣:明天可怎麼過…?


第六張  <母愛>



同樣的母親,同樣的孩子…………
這就是生活……


第七張



王致中,17歲, 在貴州以背煤為生。

一筐煤40公斤,從煤坑向上爬 100米 ,然後再走 1000米 山路,掙1元人民幣。


最後一張
一張讓我看了想哭的照片。




不得不承認有的人還生活在社會的盲點中,如果換成 是你呢?




或許沒有玫瑰,沒有鑽戒,但… 如果這都不算愛…?



那世上又有什麼才是愛???

====================分 格 線 結 束====================

讓我最感動的是第三張照片.

裡面有一點我也感同身受.....

























我也沒有打過「計程車」....

計程車有做錯什麼嗎? 為什麼要打它        \ (*< *) / ~~別打我~~

jeffyeh 發表在 痞客邦 留言(0) 人氣()

或許有些人在使用DB Connection,會有一個疑問,究竟最後是要把ConnectionCloseDispose,還是直接Dispose就好呢?Dispose,Connection也會一同Close?


 


先把CloseDispose這兩個Method給分開來看,Close是把連線給關閉,Connection物件依然存在,所以是可以再Connection.Open來使用的,Dispose,就是把Connection執行個體所使用的Unmanaged資源給釋放,所以要再使用它就必需重新建立New一個執行個體出來.


 


到這裡大家都沒有什麼問題,問題在於呼叫Dispose,是否也會Close Connection? MSDN上所看到的答案是 : 會的!


MSDN 說明 :


If the SqlConnection goes out of scope, it won’t be closed. Therefore, you must explicitly close the connection by calling Close or Dispose. Close and Dispose are functionally equivalent. If the connection pooling value Pooling is set to true of yes, the underlying connection is returned back to the connection pool. On the other hand, if Pooling is set to false or no, the underlying connection to the server is closed.


 


說真的,這幾年寫程式總是習慣先呼叫Close再呼叫Dispose,其實這也沒什麼錯,明確指令是比較好(誰知道會不會那天Framework更版也改了Dispose,就不會順便幫我們Close),當然,Using也是個不錯的用法,離開Using就會自動CloseDispose.


 


MSDN裡的說明,還有一段也是之前寫程式沒注意過的.因為我都是安份的自己RollBack,沒用Close玩過RollBack.


The Close method rolls back any pending transactions. It then releases the connection to the connection pool, or closes the connection if connection pooling is disabled.


也就是說,當呼叫Close,如果還有一些未CommitTransaction,就會被RollBack.


雖然如此,我還是喜歡自己RollBack,避免未來造成閱讀困難.


 


       Connection.Close是否可在已經Close的情況下,再呼叫Close?答案是可以的,但如果是Connection.Open,就不可以在已經Open的情況下再次呼叫Open,這就會觸發Exception.


 


參考 :


MSDN SqlConnection.Close Method

jeffyeh 發表在 痞客邦 留言(0) 人氣()

  在Oracle裡有一個不錯的階層式查詢功能,可以用很簡短的Script來達成目標,階層的意思就有點像是(總經理->副總->協理->經理->副理…..)的這種層級關係,這樣看可能還是很難懂階層或查詢的用法關係,以下是Demo的資料表:


 

TableName : UserMgrInfo












































UserNo

[人員編號]

UserName

[人員名稱]

UserMgrNo

[主管代號]

UserActive

[人員生失效]

Z001

Jeff

X059

1

X059

Kevin

X043

1

X040

Judy

B001

1

X043

David

X040

0

B001

Andy

A001

1

A001

Frank

 

1

C001

Cindy

B001

1

 

  上面這個表格的關係很簡單,每筆資料都有一個主管代號,這個主管代號就是他的上一階主管,當UserMgrNo為空時,代表為最上階主管,階層結束,之中也有人員生失效的控制,現在要做的是如何下一個查詢,找出該員的主管清單?而且只要找出生效的人員。

 

  在Oracle裡有個Start with connect by prior可以使用,以下的語法就是找出該員的生效主管清單:

 

Select UserNo,UserName from

(

        Select UserNo,UserName,UserActive from UserMgrInfo

        Start with UserNo=’Z001’

        Connect by UserNo=prior UserMgrNo

)

Where UserActive=’1’

 

這個語法所下的條件,就是找出編號Z001這個人的主管清單,這個語法所輸出的結果如下 :






















UserNo

[人員編號]

UserName

[人員名稱]

Z001

Jeff

X059

Kevin

X040

Judy

B001

Andy

A001

Frank

  而編號X043的David並不會輸出,因為他是失效人員,為什麼要用子查詢的方式去下UserActive=’1’,而不直接下在裡面就好? 因為如果直接下在裡面,這個查詢結果就只會到X059就停下來了,這個情況就很像rownum :

 

Select * from UserMgrInfo where rownum=1

這時會帶回第一筆資料

Select * from UserMgrInfo where rownum=2

這時並不是帶回二筆資料,而是一筆也沒有,如果要帶回第二筆,就要用子查詢的方式

Select * from

(

Select rownum,* from UserMgrInfo

)

Where rownum=2

 

  回正題,如果此時要查Cindy編號C001的主管清單,同樣的語法所帶回的結果如下 :
















UserNo

[人員編號]

UserName

[人員名稱]

C001

Cindy

B001

Andy

A001

Frank

所以用這個Start wit connect by prior就可以很快的達成階層式查詢囉~ 

 

參考資料 :

jeffyeh 發表在 痞客邦 留言(0) 人氣()

  今天去參加老婆同事的婚禮(其實很怕去參加這種的,我又不熟,我又有點內向,根本不知道要說什麼),這次是在遠東國際大飯店舉行,聽說一桌是2萬5(還真是要命的貴啊),雖然事前說會準時6點開始,不過還是等到7點多才開始,(這個好像是台灣憒例了),心裡想說2萬5,應該會吃的不錯吧,等了好久,好不容易開始上菜了,這時看到服務生分一小盤的拿給每個人,看到我盤子裡東西,只有烤乳豬兩片,加上一片烤肉,些許海蜇皮,第一道菜就結束了......


  第二盤花好月圓呢(炸湯圓),這次沒有幫我們每個人分好,用了四個杯子裝出來,蝦米!!!!!,就這樣?沒錯,真的就這樣,一個人分個4,5顆就分完了,後續的也不用期待了....


  整個上菜超慢的,有幾盤隔了快半個小時,第一次吃這麼久的喜酒,吃完就10點多,快11點了,加上同桌的人又不熟,東敬西敬的,好拘束,此時心裡只想要去路邊吃個切仔麵.....


  這次吃飯還遇到了"何麗玲",她就坐在我們後面那桌,那桌的人看起來就不太一樣,除了何麗玲外,她同桌的另一個不知名的女士也很特別,那位女士停車時就遇到,開著不錯的Lexus跑車,但當時因為要坐電梯,也就沒看那麼仔細,現在看到她梳著包頭,沒化什麼妝,衣著也很簡單,但那舉止就讓我跟老婆感覺到超有氣質的,(發出聖光般的bling bling),之前也有遇過讓我有相同感覺的人是嚴凱泰,那次是在機場遇到的,當時他就排在我前面,因為他不小心撞到我,跟我說了一句Sorry,光這句話就讓我有點Shock,我無法形容他的口音,他的口音讓我感覺到很Gentle,氣質就這麼一句話就讓人深深的感到,回家練了好幾次,始終發不出他那樣的感覺.....


  那桌的上流人士好像是不用吃飯的,忙著敬酒,說話,交換名片,看完他們之後,我只有一個感想,我只要當個普通人就好......


  原本回家要去吃切仔麵,好好輕鬆的吃一餐,但因為拖的太晚,就直接回家了,後悔今天沒帶像機,不然就可以拍那位女士.....

jeffyeh 發表在 痞客邦 留言(1) 人氣()

今年尾牙抽到一台26吋的液晶電視Panasonic TC-26VPK,也是我的第一台液晶電視.


這段時間都沒有什麼問題發生,直到今天突然發生了一件怪事.


老婆一直在選台,選啊選的,突然搖控器不能用了.


第一個反應就是電池可能沒電了,用三用電表看了一下,怪了,電力是滿的.


電池接觸不良嗎?


把電池裝回去,轉一轉,還是沒有用.


大腦裡出現了一個字眼"Reset".


電腦用慣了,無線分享器當機,就重開機,電腦當了,也重開,那搖控器也重開機?


搖控器上又沒有開關,怎麼重開機?


想到以前主機在排除"某個"問題,是要用放電的方式來處理.


所以就把電池拿起來,隨便按一下搖控器,放置個30秒左右,再把電池裝回去.


奇蹟發生!! 它又正常了!!


原來搖控器也是可以"重開機"......

jeffyeh 發表在 痞客邦 留言(0) 人氣()

今天工作了一整天,回家已經累的半死了,老婆突然跑來跟我說 :


今天啊,車子開泠氣,泠氣有異味跑出來,昨天都還沒有說.


(其實很累,不想動,但老婆就是一臉車子.....幫我看一下啦......)


只好帶著手電筒去車庫查看車子.


 


一靠近車子,果然有怪味,臭臭的.......>,<


打開引擎蓋檢查一下裡面,能看到的地方都看了,什麼都沒有看到.


好吧,那檢查一下空氣濾網吧.


 


東拆西拆,好不容易把空氣濾拿了下來,聞了一下濾網,耶~~濾網上有淡淡的味道咧.


但這個味道並沒有想像中的重,感覺起來又不像它.


 


又看了一下裡面的風扇,也沒什麼啊.


正當百思不得其解時,突然發現.....


 


 


右前輪壓到大便啦!!!!!


難怪那麼臭......沖好久才把它給沖掉.Orz....


 


濾網把味道給吸進去了,所以它上面也有點味道,要等它一段時間好把"味道"給散去.....


 


這段時間你就好好的"ㄙㄞ"車吧....

jeffyeh 發表在 痞客邦 留言(0) 人氣()

  記得之前有發過一篇 [PCI MZK-W04N 的韌體愈更愈糟,NAS不堪用的玩具] , 這個韌體的Bug也在去年2008/4/16回報給 [PCI Direct 久森] , 客服是有回應,但如果只是顯示問題,那也拖太久了吧.....


  基本上,我是不會再買[PCI Direct 久森] 的東西了,因為買了網路分享器/NAS,這兩樣的品質全部NG,而後續的Bug Fix也不行,以下是 [PCI Direct 久森] 的線上客服記錄.












◎ 問題詳細內容













































系統單號
QA200804162214
客服人員
CSDTW0322

目前狀態
未回覆
結案日期

問題登錄日期
2008-04-16  




問題產品型號
MZK-W04N
產品序號
20GG00778AR

目前連接的ISP廠商
HINET
寬頻連線方式
浮動制PPPoE ADSL

購買地點
台北市,內湖
其他設備




您的作業系統
Microsoft® Windows XP Home,2002,2
您的問題類型
其它問題

問題內容
更新完靭體1.09它自行Restart後,QOS設定裡,不論是新增還是修改,除了頻寬與通訊協定這兩個下拉選項,其它兩個下拉選項都是空值.

更版過程中都沒有任何問題,也是Router完成後,自行Restart,但設定後,發現還是不行,所以再手動重啟一次,但還是不行.

 








◎ 歷史紀錄
















































































































您發出回覆的日期 2009-05-12
您發出的回覆內容 Wow ~ 一年了,不簡單~未來應該也不會再碰貴公司的東西了吧.



您發出回覆的日期 2009-04-09
您發出的回覆內容 快滿一年了,突然想到問題還沒解決,只是上來留言紀念一下~

貴公司還有打算要處理這個Bug嗎?



您發出回覆的日期 2009-02-10
您發出的回覆內容 這個問題等了快一年了,有要解決嗎?
不然你們系統老是寄給給我,要我結案,可是你們問題根本沒有解決!



您發出回覆的日期 2009-01-06
您發出的回覆內容 這問題從\"2008年4月14日\"到現在2009年1月了,QOS的顯示還無法解決?依貴司的技術能力,不致於這個問題要花8個多月還不能解決的吧.



客服人員回覆日期 2008-11-13
客服人員回覆內容 親愛的客戶您好:
目前針對MZK-W04N 1.09版韌體 QOS功能無法正常顯示問題,已加緊處理當中,如有新版韌體釋出將公佈於網站上,造成您使用的不便在此跟您致歉.

謝謝
久森客服部敬上



您發出回覆的日期 2008-11-06
您發出的回覆內容 請問此商品還有打算再更新韌體嗎?
這個問題已經半年多了.



客服人員回覆日期 2008-10-08
客服人員回覆內容 Dear sir
目前公司還沒有新的韌體釋出,我們己經將您的問題記錄下來,如有新的版本韌體,我們會優先告知您,或請您至我們的網站上查詢.
謝謝
久森資訊客服部 敬上



您發出回覆的日期 2008-07-16
您發出的回覆內容 請問,1.09版的顯示問題,何時才會有新版出來?



您發出回覆的日期 2008-06-02
您發出的回覆內容 請問這個顯示問題,大概多久才會出更新版?



客服人員回覆日期 2008-04-24
客服人員回覆內容 親愛的客戶您好:
1.QOS設定為保證頻寬,如您的所舉的例子設定100K下行,為保證下行100K以上而不是只到100K,所以會受P2P軟體影響速度.
2.1.09版無法顯示正常設定.

久森資訊客服部
謝謝您



您發出回覆的日期 2008-04-23
您發出的回覆內容 如果連接到Router中的眾多電腦中,其中有一台電腦開啟Foxy之類的P2P軟體,是否該電腦的使用頻寬也是受QoS的限定,不會使用超出QoS設定外的頻寬? 還是會被Foxy把頻寬給全部吃掉?
比如說,我設QoS給那個IP的下行100K,我的Total有500K,那個IP就只會用100K,不會吃到500K,管它是用什麼軟體,P2P也一樣?

QoS的功能是否只有1.06版有作用,而1.09是無法正常顯示也沒有作用嗎?



客服人員回覆日期 2008-04-21
客服人員回覆內容 親愛的客戶您好:
你可將版本更回1.06版本,QOS功能會顯示正常.

久森資訊客服部
謝謝您



您發出回覆的日期 2008-04-18
您發出的回覆內容 那麼Qos的功能是否還能Work?

如果不行,是否我要更回前幾版,它會再出現嗎?



客服人員回覆日期 2008-04-17
客服人員回覆內容 親愛的客戶您好:
這個問題目前正在修正處理中,一有新版消息將公佈於公司網頁上
請您耐心等候,造成您不便之處請多包含.

久森資訊客服部
謝謝您


工程師應該都在忙著開發新產品上市,舊產品的Bug應該也不會去處理了吧....


參考文章 :


PCI MZK-W04N 的韌體愈更愈糟,NAS不堪用的玩具

jeffyeh 發表在 痞客邦 留言(0) 人氣()

從小就在台北長大,都這麼久了,昨天卻是我第一次到五分埔.......汗.....


走在五分埔的街巷裡,一眼望去幾乎都是衣服,難怪有不少人來這補貨 >,<


一路跟老婆逛啊逛的,老婆突然看到一件喜歡的衣服.


一問價格要580,看看衣服,價格是差不多,而且老婆也喜歡,那就買吧.


付了一千給老闆,老闆找了20元給老婆.


想說老闆先給零錢,等一下會給紙鈔.


等....


等.......


老闆也一直看著我們....


結果....


老闆說了一句話 : 謝謝光臨~


 


蝦米,不是580嗎? 我們給了1000,怎麼會只找20元?


所以馬上跟老闆確認.


老闆這時說,這衣服是 " 980 "啊!!!


還說是我們聽錯了,不過也太剛好了吧,一行4個人聽到的全是580,而且580跟980的音沒有 那麼相近吧.


因為被用這種手段,所以縱使喜歡這件衣服,還是不買了,退錢!!


老闆當時還是面有難色,不是很想退的樣子,說 : 已經入帳了,不能退!


還叫另一個店員來幫腔助勢,不過老婆也不是簡單人物.


我都還沒走過去就將兩人打敗,順利將錢取回.


 


不過 , 580跟980差那麼多,一人聽錯就算了,還4個人會聽錯.


小姐,你也太會拗了吧.......

jeffyeh 發表在 痞客邦 留言(0) 人氣()


  相信有很多人都知道Try-Catch這個東西,只要是寫在TryCatch裡面的程式發生錯誤,就會跳到Catch的地方,最後就一定會執行finally區段(如果有寫的話).如此方便的做法,使用也相當的普遍,但也常被討論它的效能問題,記得早期曾看過一段程式碼,可能當時工程師不知道如何去判斷使用者輸入的文字是否為數字(C#並沒有IsNumeric,但可以用Double.TryParseInt32.TryParse等的方式去判斷),所以這段程式碼所用的方式是用Try Catch去包一段程式,如果因為非數字而Parse失敗,就跳到Catch,所以這種效能自然差到不行,這個錯誤的例子是依懶TryCatch來做判斷,需記得TryCatch不是拿來這麼用的,只是該程式並沒有辨法使用TryParse或是CharIsNumber,因為執行平台是在是.Net1.0,Double也必需到1.1才支援,後續改用其它方式去判斷,雖然程式碼變多,但效能比用TryCatch觸發Exception來的快很多.


 


TryParse支援版本及參考清單


型別


.Net支援()版本以上


參考


Boolean


2.0


Boolean.TryParse Method


Byte


2.0


Byte.TryParse Method


Char


2.0


Char.TryParse Method


DateTime


2.0


DateTime.TryParse Method


Decimal


2.0


Decimal.TryParse Method


Double


1.1


Double.TryParse Method


SByte


2.0


SByte.TryParse Method


Single


2.0


Single.TryParse Method


IntXX


2.0


Int32.TryParse Method


UIntXX


2.0


UInt32.TryParse Method


備註


Char可以用IsNumber去判斷是否為數字,.Net1.1以上就可以用了.參考MSDN上的說明.


使用TryParse判斷字串是否為數值


*別誤解TryParse是用來判斷數值.它是用來轉型(Parse)並回傳成功或失敗的結果,DateTime來說,TryParse就是判斷字串是否轉換日期格式成功.


 


   


  TryCatch最常見的賴人寫法就是直接抓通用的Exception,例如 :


Try


{


  Code here…..


}


Catch (Exception ex)


{


  MessageBox.Show(ex.Message);


}


  其實Exception有相當的多種類,例如SqlExceptionArgumentNullException,有興趣的人可以參考MSDN上所提供的資訊,依自己所需要的情況去抓取Exception訊息,例如某段對DB操作的程式碼,如果有發生DB的錯誤,需要將錯誤寫,Log,其它Exception就不需要,就可以用SqlException去抓到DB相關的錯誤.


  可是TryCatch因為效能的關係,可別將它一股腦的在程式的每個地方都用TC包起來,如果確定不會出問題的,就不用包了,TC用在一些難以預期的意外上或是刻意要抓取的例外,就很好用,例如DB的連線,沒人可以保證你的程式在與DB連線時,100%不可能斷線,或是IO寫檔到一半,磁碟機斷線或是掛了,這個程式碼很難防,好不容易寫了一堆程式碼來防範,結果下次又因為別的狀況又掛了,此時還是TryCatch好用.


  即然提到它的缺點類別,那它在一些特殊用法時,它會是什麼樣的情況,例如巢式TryCatch,呼叫端與被呼叫端均有TC包起來,如果發生Exception,那會是那個TC被觸發?以下用幾個簡單的例子來說明 :


 


Ex 1 :


try


{


int i = 0;


        int k = 10 / i;


        try


       {


            int a = 0;


            int b = 10 / a;


}


       catch


       {


            MessageBox.Show("inside");


}


}


catch


{


MessageBox.Show("Out Side");


}


 


  紅色字的部份,就是會發生錯誤的地方,當執行到第一個k=10/i,就會發生錯誤,就會跳到Out Sidecatch,inside的部份並不會執行到.


 


Ex 2 :


try


{


    try


    {


        int a = 0;


        int b = 10 / a;


     }


    catch


    {


        MessageBox.Show("inside");


     }


     int i = 0;


     int k = 10 / i;


}


catch


{


     MessageBox.Show("Out Side");


}


  Ex2的做法類似Ex1,不過這次把裡面的TC往上移,這次執行就會執行到第二層的TC,所以也會觸發Exception,但只會觸發insideException,OutSide的並不會被觸發,Out Side的部份則是執行到k=10/i,才會觸發,也就是說,第二層TC觸發後,並不會直接跳到外層的TC,它還是會往下執行.


 


EX3 :


private void button4_Click(object sender, EventArgs e)


{


     try


    {


          Ex2();


     }


    catch


    {


            MessageBox.Show("From click");


     }


}


 


 


private void Ex2()


{


    int i = 0;


    int k = 10 / i;


}


呼叫function的程式寫法也很普遍,但如果今天被呼叫的function發生錯誤,而且沒有包TC,用呼叫端去包function,也是同樣可以catch到錯誤,以這個例子來說,還是可以抓到Message”嘗試以零除。”.


 


EX4 :


private void button7_Click(object sender, EventArgs e)


{


     try


    {


            Ex5();


     }


    catch (Exception ex)


    {


            MessageBox.Show(ex.Message);


     }


}


 


private void Ex5()


{


     try


    {


        int i = 0;


        int k = 10 / i;


     }


    catch (Exception ex)


    {


            throw new Exception("Error : "+ex.Message);


     }


}


  如果有時候希望回丟的訊息除了原本的Message,能再加上額外的訊息供判斷,例如錯誤單號或是檔案,就能更清楚的找到錯誤資料,這時就可以用throw new Exception的方式來丟資訊,這個例子所Show出來的Message就會是”Error : 嘗試以零除。


  Exception可以抓到的不只是目前例外狀況的訊息而已,也可取得造成錯誤的程式或物件名稱等,finally也是很重要的一環,不管有沒有觸發Exception,finally區段一定都會執行到,所以善用TCException所提供的資訊,相信能更容易的掌握問題點,Try-Catch-Finally所包住的程式效能並不會有多大的影響,效能只有在觸發Exception時才會比較差,所以該用的時候還是要用,別把TryCatch當文章開頭提的一樣,用來當判斷用,那效能真的是會出人命,而且Exception是可以抓到所有的Exception沒有錯,但效能會差一點,如果能明確指定是那一種Exception,效能會比較好,例如以下寫法.


try


{


        Code here.


}


catch (SqlException se)


{


        Section 1


}


catch (Exception ex)


{


        Section 2


}


  如果是發生SqlException相關的錯誤,那就會執行Section 1這段,就不會執行Section 2,如果發生的是SqlException外的,那才會去執行Section 2.


那為什麼明確指定Exception種類的效能會比較好呢,因為它就不用再到共同Excption去一個一個找出錯誤的資訊,減少查詢範圍.


 


參考資訊 :


MSDN Exception屬性


MSDN 理和擲回例外狀況


MSDN 結構化例外處理概觀


Visual Basic .Net的效能最佳化

jeffyeh 發表在 痞客邦 留言(0) 人氣()

  這次的5/1連假跑到台中去鬼混,規劃了一個"遊山玩水,看海逛大街"的行程,行程中可是有知性的賞螢跟精油體驗,這次出遊剛好惠蓀林場有套裝的行程,一個人要600,含早/中/晚各一餐,行程中有賞螢跟精油體驗,精油體驗完還有送一瓶小精油,還不錯聞,所以這個費用還算OK.

=======================我是第一天的分格線=======================
第一天 早上8:30台北出發

  一路上沒什麼塞車,到台中就11點多了,因為接下來要走國道6號,於是就先往彰化吃午餐,到彰化當然就是去吃阿璋肉圓囉 ^^

  解決了午餐,開始往惠蓀林場前進,有了國道6真的省不少的時間,但惠蓀還真是夠深山啊,不知道翻了幾座山,好不容易看到了門口,大夥正開心終於到了,準備拿東西要下車了,沒想到警衛伯伯冷冷的說,從這到裡面還有6公里...........Orz...

  又噗噗了6公里,這次真的到了"惠蓀",裡面的導覽還真是給他不熟,找不到住宿中心,加上長途跑下來,也忘了加油,此時汽油只剩一格......還好山上不怎麼熱,泠氣就全關,多少可以省點油,最後在山頂上找到住宿中心.....


房間外觀普通,但也是很舒適~

  原本應該可以很早就到了,因為有走錯那麼一點路,加上找不到住宿中心,剛好趕上2:30的精油體驗,不過斌哥憺心車子沒油,先把我們載到山下參加活動,他一個人開車去加油,最近的一個加油站要開30分鐘.....斌哥真是好人~~賜好人卡一張~~

  精油體驗一開始會拿一些柳杉給大家剪,之後就會拿這些柳杉去蒸餾出精油,介紹了一下精油製造過程,因為晚上還有賞螢活動,也先看了螢火蟲的影片(不知是太累還是怎麼,睡的好舒服.....)


剪柳杉這種粗重的工作,當然是交給老婆.......我負責拍照^^


研習中心裡,有些之前921大地震所震倒的神木~



活動結束,斌哥也剛好回來,一行人再到山上去吃晚餐吧~

  晚上的賞螢之旅,別懷疑,它在山下......所以一行人又往山下跑,還好有車,不然會累死,進到賞螢區還真的看到不少的螢火蟲,愈往裡面的光害愈少,看到的螢火蟲愈多,導覽員說今年的量還不是很多,之前螢火蟲多到走路都會撞到,但這次同一時間可以看到數百個光點,對我而言就很多了,如果可以更多,當然是更好囉~

  賞螢活動結束,就各自回房休息,這晚四個傻蛋泡了兩碗泡麵,開起了泡麵趴,斌哥一家人沒有參加,我想他們應該已經累翻了吧......

=======================我是第二天的分格線=======================
第二天 早上7:30開始Papago!

  早上到餐廳吃早餐,呼吸新鮮的空氣,因為吸進乾淨的空氣,放出來的小屁屁都很清新(哈哈哈哈,老婆都沒有發現到,其他人因為站太遠了,沒有福氣體驗)~~


早上的感覺真的不錯~


這樹綠到像假的......



  之後導覽員就開始帶著大家往林區前進,山上的空氣真的很好,天氣也很優,相機拍起來的效果很好,導覽員介紹的很認真,我也聽的很用力,可是我還是不懂,還是去拍拍照,賞風景去~


抬頭一看,好茂密的樹~


空氣好,天氣佳,風景美,怎麼拍都有Fu的咧



看起來有點像吊燈.....



第一次這麼仔細的看它.....



這是螢火蟲咧,還真是大隻,不知道會不會咬人......


(註 : 拍完照後,蟲老大在我手上大便.....)




  林區的導覽結束,就發中午的便當,套裝的行程就結束了,一行人在樹蔭下吃便當,便當並不是特別美味,但因為環境的關係,吃起來很舒服,吃完便當,大家打了一點小牌當飯後運動.





  遊了山,接下來就是玩水了,在林區內還有親水區,水真的很清澈,也很冰泠,腳泡在水裡是整個冷到不行,早上走了一早的山路,泡泡冰水也是很讚的咧.





  林場還有個東西也要去"體驗"一下,就是咖啡,導覽員介紹這可是道地的咖啡,難得來這,當然就要去品嚐一下囉,點了一杯100,喝起來還不錯,天氣有點熱了,真想再來個刨冰.....




沒有很特別外觀咖啡屋~



100元的咖啡,太熱了,所以點冰的....




  從林場開到市區也花了不少的時間,但有國道6號,至少也省了不少時間,到紙教堂也差不多4點了,沒想到人還真的不少,不過運氣好,有車位可以停,門票50,可以抵消費(現在好像都是來這套),4:30剛好有日本來的非洲鼓表演(我本來已為是非州人表演非洲鼓....),輕鬆的享受下午的閒情~




沒想像中的大,不過也是小而美,小而省~



為什麼天花板上有魚? 跟教堂有什麼關係?



柱子上的水痕依然清楚可見.



這紙做的椅子沒被你們坐垮......



戶外的非洲鼓表演~




  今晚到文華道會館住宿,上次沒訂到,這次運氣真的不錯,訂到了3間雙人房,設備都很新,離逢甲夜市超近,走路就可以到,辨好了Check In,大家行李放一放,晚上的行程就是逛夜市囉,不過人真的超多的,人幾乎擠到動彈不得,買個大腸包小腸就排了半個多小時,因為晚上沒吃,就買了一些東西回房間吃,今晚的主題就是逢甲趴啦,但老人家的體力差,我跟老婆是累到趴,妹妹們跟斌哥是又去泡腳趴,但斌哥開了一天的車,體力也不濟,泡腳趴後,就回去睡了,妹妹們可是體力好(因為路上一直睡= ="),又跑去逛夜市,玩到1兩點才回來,我要說的不是年輕真好,我想說的是,當乘客可以睡覺真好.....



廁所是玻璃隔間的,但還是看不到裡面,可是如果是從上面或是下面.....

=======================我是第三天的分格線=======================
第三天 早上8:30 文華行動~

  這麼舒服的飯店,當然要多睡點囉,而且這兩天也是累的咧,所以到8:30才去吃早餐,這麼早,台中還沒有什麼地方有開,而且今天是連假的結束,在台中自由路買了太陽餅就北上.

  原本計畫是到苗栗看油桐花,但最近的新聞打太兇了,遊客爆多,南上北下的苗栗交流道就塞了3公里左右,我們選擇到下個交流道再下,避開Papago所帶的路(這年頭,大家都跟著導航塞車),避開了塞車,到了油桐花坊,沒想到,也是塞車,車子都不給上山,人這麼多,賞花也沒那個 Fu~~~,換個地方一樣可以玩的啦,臨時換點,到新竹內灣吧~

  到新竹內灣也是不少人,但還有停車位,買東西也沒什麼排到隊,玩了投球九宮格,我想我真的太久沒運動了,投的超不準 =="......國中時代還是主力投手咧.....投不準,力氣應該還有吧,玩敲槌子的遊戲,沒想到沒敲到中心,手是整個麻到不行....Orz....




好多人啊,不過逢甲夜市比這還多很多......




  太陽漸漸西下了,為了避免遇到連假的回家車潮,就早點北上回去,先南下把妹妹送到新竹車站丟包,這時就看到北上已經塞車了,Papago都是帶國道,所以決定走西濱回台北,這個決定是對的,一路上沒有什麼車,偶而可以看到重機車隊,及風力發電,看看海景,這次的行程就真的"遊山玩水,看海逛街"~

  晚餐就到蘆洲的阿六切仔麵解決,切仔麵可是蘆洲的代表食物之一,在電信局前面還有切仔麵公仔,晚餐解決後,就各自回到溫暖的家囉~

========================我是最後的分格線========================
  這次的三天兩夜玩的還不錯,但這只是個暖身行程,因為5月底要去吳哥窟^^,這次就讓我走到腳跟破皮,吳哥窟應該會讓我走的更痛吧......


 

jeffyeh 發表在 痞客邦 留言(0) 人氣()

  Sharewatch這個小東西放出來有段時間了,最近有不少聲音希望能加入Log功能,目前是沒想到要怎麼樣去記錄,就先寫一個簡易的版本,所以版次沒有跳很多,就多了那麼0.0.1,這個Log的記錄方式很簡易,就跟介面上 [目前狀態] 所看到的資訊一樣,只是多了一個記錄檢查時間點.


記錄的檔案會放在跟程式執行的同一個路徑下多一個Logs目錄,記錄檔就放在裡面了,檔案命名格式為 [SW年月日.csv]




其它。。。。。什麼都沒想到。。。。。現在心裡只想到5/1要出去3天兩夜旅行。。。。。。。。。

 


文章 : 共享目錄使用監控程式


下載(2.0.0.1版) : ShareWatch.rar

jeffyeh 發表在 痞客邦 留言(5) 人氣()

  今天看了一下微軟這個月份的知識電子報(2009年4月),發現到文章的最下面列有6個月內將結束延伸支援的產品清單,大多已經都沒在用了,除了Visual SourceSafe 6.0.....




這些產品的拔管日期已近........




產品發行 主流支援
終止日期 延伸支援
終止日期 Service Pack
終止日期
.NET Framework 1.0 2007/7/10 2009/7/14 2003/3/19
Access 2000 Standard Edition 2004/6/30 2009/7/14
eMbedded Visual C++ 4.0 2007/7/10 2009/7/14
Excel 2000 Standard Edition 2004/6/30 2009/7/14
FrontPage 2000 Standard Edition 2004/6/30 2009/7/14
Office 2000 Developer Edition 2004/6/30 2009/7/14
Office 2000 Premium Edition 2004/6/30 2009/7/14
Office 2000 Professional Edition 2004/6/30 2009/7/14
Office 2000 Small Business Edition 2004/6/30 2009/7/14
Office 2000 Standard Edition 2004/6/30 2009/7/14
Office 2000 Web Components 2004/6/30 2009/7/14
Office 2000 Web Components in
Office XP
2004/6/30 2009/7/14
Outlook 2000 Standard Edition 2004/6/30 2009/7/14
PhotoDraw 2000.2 Standard Edition 2004/6/30 2009/7/14
PowerPoint 2000 Standard Edition 2004/6/30 2009/7/14
Publisher 2000 Standard Edition 2004/6/30 2009/7/14
Visual Basic .NET 2002 Standard Edition 2007/7/10 2009/7/14
Visual C# .NET 2002 Standard Edition 2007/7/10 2009/7/14
Visual C++ .NET 2002 Standard Edition 2007/7/10 2009/7/14
Visual SourceSafe 6.0 Standard Edition 2007/7/10 2009/7/14
Visual Studio .NET 2002 2004/6/30 2009/7/14 2006/2/28
Word 2000 Standard Edition 2004/6/30 2009/7/14



參考資訊 :


Microsoft 產品技術支援週期準則


微軟 : 選擇一個產品檢視其支援週期資訊


微軟 : 支援週期索引

jeffyeh 發表在 痞客邦 留言(0) 人氣()