最近因為在思考如何驗證取得的檔案與來源端相同,比對檔案大小是個方法,但不是很好,畢竟它也可能同大小,但內容不一樣,於是就想到 Checksum這個名詞,大概找了一下網路上的資料,發現方法各有不同,所以算出來的結果也會不同,想來想去,反正來源端的checksum的運算方式 只要同目的端,這樣就可以達成驗證的目標了.


  這次用的方法其實也很簡單,不論是MD5或SHA1都不過兩三行的程式即可達成,這次就用VS2008的C#,來用WinForm做Demo,這個功能會用到加密的功能,及讀檔的部份,所以用到以下幾個namespace.


using System.IO;


using System.Security.Cryptography;




SHA Code :


            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                using (FileStream fs = File.OpenRead(openFileDialog1.FileName))
                {
                    SHA256Managed sha = new SHA256Managed();
                    txtResult.Text = Convert.ToBase64String(sha.ComputeHash(fs));
                    txtPath.Text = openFileDialog1.FileName;
                }
            }


MD5 Code :
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                using (FileStream fs = File.OpenRead(openFileDialog1.FileName))
                {
                    MD5 m = MD5.Create();
                    txtPath.Text = openFileDialog1.FileName;
                    txtResult.Text = Convert.ToBase64String(m.ComputeHash(fs));
                }
            }


   看一下MD5及SHA的程式碼幾乎一樣,但各會依據其加密方式取回checksum,如果檔案內容有所不同,則checksum就會不同,記得看過一篇 討論,如果日期時間相同,就會產生相同的checksum,但從這程式碼中就可以發現,加密的來源是檔案內容,並不是檔案屬性,這也才是所要驗證的目的.




範例下載 : ChecksumTest.rar

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

  工作忙了整個星期,難得假日的好天氣,待在家裡太可惜了,所以這週六就跟家人跑到基隆來個一日遊,路痴的一行人,當然只好拿出PAPAGO來找個好玩的地方,找到了一個景點"大武崙砲台",還沒有去過咧,那就來去那邊探險一下囉,距離也還好,從北二高下去再開一小段路就到了,在大武崙砲台的附近有個大停車場,視野還不錯,沒什麼遮避物,再轉個彎就到大武崙砲台了,所以就把車停在這邊,走路過去就好~


 


台砲崙武大 ??? 哦,要由右至左念........



看了一下園區導覽,看起來很小,走起來累死人.....



出現在眼前的第一個景點就是營房,果然睡覺是最重要的~



這個營房遺址看起來很有感覺,不知道這是戰爭時損壞的還是後來自然損壞.



這種營房門口,看起來真是特別,正面看起來像兩個眼睛,張大了大口,看起來真像個"囧"......



這張照片事後我們大家想了很久,想不起來這是什麼,老婆說這是隱形眼鏡嗎?怪了,我又沒拍那個,(我的第一個反應是"怎麼會有菊花照?"還是說,這個是咒怨?),正當大家想到快放棄時,突然想到,這是宿合內天花板的那個洞啦,可見當時可是很重通風的咧(不知道是不是通風,不過當時還在猜想,這是像消防員一樣,有根桿子,可以快速的從上面滑下來),但這樣下雨時,不就很慘.....



是人都會大小便,軍人也一樣,在宿舍的旁邊就是廁所啦



在外面就可以看到便便的地方囉



說真的,我有試著"跨"上去,不知是我腳短還是以前的人腳長,我只能蹲馬步的方式,不能再蹲下去,腳不夠長,沒想到,當時的軍人連大便也很辛苦,還要練馬步.


學弟:學長,您的馬步可真穩啊


學長 : 學弟,當然,想當初我也是常失足掉下去,沾了滿身的大便,久了馬步就穩了,現在大便還可以擦搶咧.


以上台詞純屬虛構,如有雷同,那就雷同吧~



避彈壕,深1米8咧,不知道裡面曾經塞了多少人.



好大的一"根"氣根啊,沒想到氣根落地後,也變的跟樹幹一樣,這姿勢真像手持步槍的樣子,果然樹是有"靈性"的.




走到這個塔,當然拍一下照來個到此一遊囉,拍到傳說中的紅衣女子出現....



不管在那,就是能看到遊客的留言,公德心還是一樣的差....



剛看了一排的避彈壕,沒想到還有這種兩人份的咧



三人份的??



蓄水井,沒想到裡面還有水咧,除了水之外,不知道還有什麼東西....

 


彈藥室到了咧



這裡面可是曾經放了不少的彈藥,如今已空無一物~


註 : 拍攝當時是完全黑暗,沒有半點光,心裡有點給它毛毛的,真怕拍到不該拍的.....



彈藥室的旁邊就是礮盤區囉



看起來有種特別的味道,戰爭當時一定很忙吧.



大炮已經不在了,有點點的失望~



礮盤區跟彈藥庫有兩邊哦~



礮盤區的旁邊就是觀測台了



依這小小的道路往裡走去~



草都比人高的觀測台,站在這邊我什麼都看不到.....



  走到這裡,就逛的差不多了,辨公室坐久的我們,此時腳都已經酸到不行....離大武崙砲台的不遠處,就有另一個景點"情人湖",在路上就可以看到一台明顯的黑色火車放在那邊.



不知道為什麼,這火車頭看起來會讓我想到無敵鐵金剛.....



情人湖裡當然要有湖囉,這個湖跟想像中的不太一樣,從簡介中看來,這湖形像個龍爪(這是簡介說的,我看起來像珊瑚)



現在的簡介做的還真詳細...



這個風車不知道為什麼,有點給它不搭.....



延著環湖步道走,可以看到路燈都是LED的,還有不少是太陽能的,果然是很環保,不過這座太陽能路燈照的到太陽嗎.....



沒想到情人湖內還有座小吊橋,限同時六個人在橋上,走在上面的時候,比想像中的搖咧.



果然是情人湖啊,這隻烏龜想做什麼啊~~



剛看到這個時,搞不懂為什麼要放這個,後來才想到右邊的蛋是放在"籠"中,所以是"雞籠"=基隆~



 


  逛完了情人湖,再去外木山漁港,不知道是去的晚,還是怎麼,商家全關了,只剩釣客在那釣魚,人還不少咧,短暫的停留,接著轉往"飛碟屋"的方向前去,開了許久,飛碟屋是沒看到,不過看到了那排廢棄的房子,原本以為裡面完全沒人住了,但仔細往裡頭一看,裡面還有2,3戶的住戶咧,真配服他們,如果是我,我才不敢住,找了老半天,就是沒找到飛碟屋,應該是拆光了吧,只好放棄找尋,改在白灣散個步,享受難得的閒悠.....


  晚餐就在淡水老街打發,說出來沒人相信,這是我第一次吃到淡水阿給,生平的初體驗,吃起來有點給他像甜不辣,可能之前先吃了紅槽肉圓,在吃阿給的時候,味道有點給它淡了點,走了一天,腳也酸了,肚子也飽了,原本是減肥之旅,結果在淡水就一次補回來.....

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

  最近常看到萬王之王 3的廣告,不知道為什麼,每次聽到廣告台詞"夠硬"時,我總是會想起一首歌~~哩系哇心內吔一首歌~~~~


咳~咳~咳~~~當然不是,這是一個相當出名的MV,十分適合萬王之王 3 的廣告咧,保證夠硬~


 


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

  今天不知道是什麼日子,中午要去基隆玩的時候,在新店二高上看到4台法拉利疾駛而過,看了一下大約時速1百多左右吧,引擎聲真是震憾啊,看起來似乎是同一型的,每種顏色的一台,往石碇那開去了,一次能看到4台千萬級的跑車,真是不容易啊.

  晚上在車子開在隧道內,突然隧道內震起熟悉的引擎聲,沒錯,這就是下午聽到的法拉利的聲音,不過這次聲音更高亢,而且接近的速度超級快,還沒反應過 來,左手邊就快速的一台法拉利閃過,並馬上超到我這個車道往前衝,說真的,我只看到尾燈,車型是法拉利,還有顏色,其它什麼都還來不及看,就拉爆遠了,看了一下車上的時速表在100公 里左右,依照這樣的速度,對方一定在200以上,而且是六台法拉利接連的超過我們,我竟然完全看不到他們的車牌,隧道內的每台車應該都被他們嚇住了吧,超速,任意 變換車道的"法拉利"~~~

  更神的來了,回家後,原本想查那幾台車是什麼車型,意外的在Youtube看到同樣是那幾台車的影片,地點也是在石碇,看樣子他們很常在那"散步",有興趣的朋友可在那賞車.....


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

  這幾天一直在試剛拿回來的液晶電視,說真的,畫質一直不是很滿意,當時沒想到是輸入訊號是AV端子的關係,一直在調整電視,亮度要調高才看的到,真的很難接受,而且DVD Player的畫質也不行,顆粒很大,玩PS2更是痛苦,所以今天跑去買了一條PS2的色差訊號線,亮度是好一點了,但感覺最大的是顏色的改善,改試DVD Player的畫質,因為DVD Player沒有HDMI的輸出,所以只能用色差輸出,結果顏色果然也比AV端子好很多,再試MOD,雖然它有HDMI的輸出,但我沒有線,只好也是用色差,結果還不錯,終於讓我感覺到液晶畫質好在那.

  從CRT換LCD,CRT有個好處,因為解晰度低,它可以模糊掉不完美的畫質,所以看起來還不錯,PS2用AV端子玩就夠了,而LCD因為解晰度高,很多缺陷都會變的很清楚,在CRT上播放上次出去玩的照片,妹妹臉上的雀斑不很仔細看還真的看不出來,這次用LCD來播放,大家都啞口無言........



所以呢,下次拍照請記得化妝.......

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

  好久沒寫GPS相關的東西了,前一段時間一直在忙東忙西的,之前有寫兩篇跟GPS相關的文章,主要是在如何從GPS取得目前所在座標,最近在 MSDN Magazine看到一篇如何計算兩點座標的範例,剛好是我前一段時間一直在找的答案,當時卡在的一個問題點是如果兩點是直線,那就很好算了,但地球是圓 的,所以就不是算兩點直線,需使用球面余弦定率,探討的愈深入,我會愈想睡.....所以MSDN Magazine真是佛心來的,這次就有這個範例,我也不用去想破腦子,不過Magazine上的範例並不完整,有個Function沒提供,所以根本不 知道它呼叫這個Function還有做什麼,所以在這補上那個未加入的Function (如果有誤,也請指正).


Magazine上的範例 :


01         public double GetDistance(double Lat1, double Long1, double Lat2, double Long2)
02         {
03             double Lat1r = ConvertDegreeToRadians(Lat1);
04             double Lat2r = ConvertDegreeToRadians(Lat2);
05             double Long1r = ConvertDegreeToRadians(Long1);
06             double Long2r = ConvertDegreeToRadians(Long2);
07
08             double R = 6371; // Earth's radius (km)
09             double d = Math.Acos(Math.Sin(Lat1r) *
10                 Math.Sin(Lat2r) + Math.Cos(Lat1r) *
11                 Math.Cos(Lat2r) *
12                 Math.Cos(Long2r-Long1r)) * R;
13             return d;
14         }

15

補充 Function :


1         private double ConvertDegreeToRadians(double degrees)
2         {
3             return (Math.PI/180)*degrees;
4         }



  之前一直想做這個,因為可以做出像"龍珠雷達"的東西(太迷七龍珠了...),用途咧,可以用來玩尋寶遊戲,還有我每年都會痛一次的掃墓,因為很多墓地不是放在靈骨塔,都是在很偏僻的地方,每年都花很多時間在找墓地,如果用Papago之類的導航程式都會亂跳(顯靈了嗎?),所以直接儲存墓地的座標,下次再找的時候,就可以知道目前位置與目的點的距離.




參考資料 :


MSDN Magazine : 使用Mappoint和GPS的位置感知應用程式

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

  剛進公司不到半年,不知道走什麼牛屎運,竟然讓我抽到液晶電視,雖然尾牙在年前就結束了,但因為後續作業關係,無法馬上領獎,所以到年後上班的第一天才可以開始領獎品,剛得知中獎的那一刻,真的是爽到"俺昇天啦~",但當時一直無法確定是那個品牌的電視及尺吋,因為中的是廠商提供的獎品,不太可能是大尺吋的,也不太敢奓求是知名品牌的,畢竟有中就很好了.

  等啊等的,一顆心懸到了今天,答案終於揭曉了,沒想到是Pansonic TC-26VPK,雖然是26吋的,但也是台不錯的電視,今天剛領到就馬上通知老婆開車過來載回去,今天回家吃晚飯的速度也吃超快的,因為這是家裡的第一台液晶電視,其它的全是CRT的,打開包裝,裡面就三樣東西,電視/電視盒/搖控器,(真是奇怪,為什麼電視盒在出廠時不就先鎖上,還要消費者自己鎖?),不到幾分鐘電視就裝好了,馬上選了幾台電視看了一下,此時老婆就開始很熟練的跑到小紅(PS2)那,按下開機,拿著搖桿跑回沙發,精準的按下搖控器上的按鈕切換到Video 1,電視上馬上顯示電動的畫面,從這刻起,我就坐在地板上看老婆打電動,今日的初體驗就是看老婆打電動.....

  不知道是不是這台電視對比不高的關係,打電動時的畫面超暗,CRT還不會這樣,路都看不到了,只好調亮度及對比等設定,畫面才正常...用AV端子的表現果然不好,找個時間去買條S端子或是色差回來接看看.畫質應該會好多了.

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

  前幾天在家因為要等人,沒事做,就在電腦上瞎打,在google裡打入朋友的名字,不知道是朋友的名字太特別還是怎麼樣,只有兩筆結果,但這兩 筆也讓我感到驚訝,其中一筆是朋友當初在當某產品的行銷專員,所以舊新聞稿上是用他的名字,新聞稿上只有他的名字及公司名稱及公司電話,而另外一筆就可怕 了.


  剛點下連結,跳出訊息要我"依正常管道連結",哦哦,原來還有正常管道這種東西哦,點下確認就跳開了,看來似乎還是有權限管制,資料不會外流,但Google的查詢結果有摘要簡介,從簡介中就看到朋友的私人手機,家裡電話,住址,MSN,電子郵件了,所以很確認這個人就是我朋友,可見得那個網頁有很大的漏洞,讓google給爬了進去,那網頁有權限設定,除了摘要之外,其它人的應該就看不到了吧,別忘了google還有另一個讓人又愛又恨的功能"頁庫存檔",點下去一看,Wow~~~全班的通訊錄都在上面了咧,資料還真是詳細完整啊,還有紅字註記,註明最後更新的資料,我想這清單上的人,沒人知道他們的資料全世界都看的到吧,這群可憐的輔大同學.


   從這個地方就可以知道一個問題,我們的個人資料不見得是有人"蓄意"去盜取,而是我們自己或他人的不小心而外流,以這個輔大同學通訊錄來說,放上版的同 學想說,這個網頁有密碼權限設定,沒有密碼的人就看不到了,也不會有人去檢查它的安全性,通訊錄上的人也更不可能去檢查這個,所以google"強大"的功能就幫大家把這資料"存"在它的資料庫裡,供大家取用.


  除此之外,有時在論壇跟大家討論,可能某個問題想要直接的與當事人聊,索性就把自己的聯絡方式PO在上面,他可能忘了這可是大家都看的到的,就算後來刪了該筆留言,google也可能還存有該筆資料,所以還是查看的到,許多論壇都是用套裝的去架設,所以有許多網站的管理者不見得有足夠的能力去管理,為了加入該網站的會員,在註冊時就把自己的個人資料照實的填入,並不是套裝論壇就不好,它也有安全性更新,管理者是否有定期去更新?曾經在某個小論壇,發現該管理者完全依"說明手冊"安裝論壇,所以密碼跟手冊上的一樣......別忘了,google還可以搜尋檔案,資料庫整個下載也不是做不到,之前就看到某公司的銷售資料用Access存的,,用google竟然搜尋的到,而且還可以下載~~


  所以當自己愈來愈瞭解網路的利害關係,就愈加小心,畢竟沒人想要自己的個人資料在網路上裸奔~

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

  記得不久之前還在期待年假的到來,放年假前的最後一個工作日還是那麼的開心的,如今年假已經結束了,這次過年有點忙,忙著準備年菜,拜年,帶家人出遊,過年這幾天就這麼的忙過了,跟許久不見的晚輩聊聊天,之中有幾位晚輩還真的讓人憂心.


  這段時間因為無薪假等等因素,線上遊戲的業績大為上升,一堆怪廣告也出現,目前仍不知"殺很大"是在玩什麼,也沒興趣知道,不然就是好像把宅男都當成色情狂的女神廣告,再不然就跳出什麼良家婦女的廣告詞,感覺起來OLG (OnLine Game)都怪怪的,而讓我感到憂心的晚輩則是過度沈迷於OLG.


  一年前,晚輩待業沒工作,一直在玩OLG,家人為他著急,好不容易找到工作,一年後再跟他聊,發現仍然沈迷於OLG裡,專業技能則沒有半點長進,問他未來的規劃,則是沒有答案,這一年來一直把精神放在OLG上,提到OLG這個主題時,倒是源源不絕的跟我介紹,我多希望這情況是相反.


  記得5年多前,我也是沈迷在OLG的世界,但一年後發現,原本在OLG裡的玩伴一個一個走了,自己的帳號已練到很高,突然感到虛無,再怎麼強也不過是這樣空虛的東西,我怎麼把時間花在這個空虛的東西上,而且這段時間我完成沒有成長,所以才斷然的決定不再玩OLG,把心思放在工作上,開始去補習班上課,把之前浪費的時間補回來,現在看到晚輩這個樣子,真的很希望他能快點回到現實世界,有些無薪假的朋友也是在玩OLG"打發"時間,說真的,何不把這時間用在充實自己上面,或許能快點讓這個無薪假早點結束.


  新的一年即將開始了,看到今年公司安排的計劃表,想必也是會忙到不行,但今年想要去補習班上課,如果時間排的開,再來去考的升級考,把之前拿到的MCSD.NET及MCDBA升級到新的去~


 


該收心囉,今年一定要比去年更有成長~

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

  MOD裝快1個月了,說實在的,因為有第四台,也很少去動它,除了剛裝的前幾天會去看一下它有那些內容,裡面僅有NBA的節目還不錯(因為我是NBA迷),而且還是免費的,打開MOD大概就是只有看NBA吧,就在前天心血來潮,打開MOD想看NBA,這次遇到首次當機,當進入NBA選單時,畫面一遍黑,而主機上的燈號一直閃,應該是在傳資料,但等了一段時間,始終沒有畫面出來,只好使用一百零一招,按上主機上的Reset,重啟後就正常了,正當我選好賽事要進去看,突然發現,X的,怎麼要付費,之前不是都不用錢嗎,怎麼現在突然要收費,我沒有收到任何的通知啊,這時看了一下注意事項,NBA從今年元月一號起,開始收費.

  看到真的是罵到無力,裝MOD讓我唯一想看的就是NBA賽事,結果它現在變成要收費了,而月租費99所能看到的(所謂免費)頻道還真的是看不下去,未來也不知道會不要跟NBA一樣,突然變成要收費,那這月租費付費後,所能看到的"免再付費"基本頻道有那些?16台數位電視跟幾個國外頻道?ATM功能?所以不是每個月99月就有一堆可以看,而是很多還要再額外付費才能看的.....

  以目前的MOD頻道要我退掉第四台,那還真的很難,第四台的月租費雖然比MOD高,但至少付月租費後,就可以看所有的頻道,而MOD並不是,所以也有可能費用高於第四台,而且MOD只能接一台電視,而第四台可以接多台電視,每個人可以各看各的電視.

  無奈MOD還有11個月才到期,等它到期就馬上退租~

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

  寫Master及Detail連動的功能很常見,就是點擊主清單時,在副清單會顯示出該項目的明細資料,但很多時候因為資料量的考量,都是點擊 主清單時,再依點擊的項目至資料庫取回明細資料,這種寫法用久了,很容易就忘了還有DataRelation這種東西,沒錯,如果一開始就將所有的明細資 料都從資料庫取出,資料量是很可怕的,所以點主檔再取明細是較好的做法,那DataRelation不就沒用處了?答案不盡然,就看是否用在對的地方,那 些方面可以運作就不介紹了,接下來要講的是如何使用DataRelation.


這範例所表現出來的畫面如下 :


程式開始會先產生一些基本資料,左邊的Grid為主檔,右邊則為相關明細,當我點左邊的Judy時,右邊就會顯示Judy的資料,注意看,No是一樣的.



當我點擊Jack後,右邊的明細馬上就會自動帶出Jack的資料,此時的No一樣都是1了.



  要做到這樣的效果一點也不難,也不用很久,除去基本資料的準備,建立DataRelation及丟到Grid,不過就五行程式碼(也可說只有三行,如果丟到DataGrid.DataSource不算).


程式碼如下 :


01         private void Form1_Load(object sender, EventArgs e)
02         {
03             try
04             {
05                 #region 準備預設顯示資料
06                 DataSet ds = new DataSet();
07                 DataTable dtm = new DataTable("BasicMaster");
08                 dtm.Columns.Add("UserNo", typeof(int)).ReadOnly = true; ;
09                 dtm.Columns.Add("UserName", typeof(string));
10                 dtm.Columns["UserNo"].AutoIncrement = true;
11
12                 DataRow dr1 = dtm.NewRow();
13                 dr1["UserNo"] = 0;
14                 dr1["UserName"] = "Judy";
15                 dtm.Rows.Add(dr1);
16
17                 DataRow dr2 = dtm.NewRow();
18                 dr2["UserNo"] = 1;
19                 dr2["UserName"] = "Jack";
20                 dtm.Rows.Add(dr2);
21
22                 DataTable dtd = new DataTable("BasicDetail");
23                 dtd.Columns.Add("UserNo", typeof(int)).ReadOnly = true;
24                 dtd.Columns.Add("Phone", typeof(string));
25
26                 DataRow dr3 = dtd.NewRow();
27                 dr3["UserNo"] = 0;
28                 dr3["Phone"] = "123456789";
29                 dtd.Rows.Add(dr3);
30                 DataRow dr31 = dtd.NewRow();
31                 dr31["UserNo"] = 0;
32                 dr31["Phone"] = "987654321";
33                 dtd.Rows.Add(dr31);
34
35                 DataRow dr4 = dtd.NewRow();
36                 dr4["UserNo"] = 1;
37                 dr4["Phone"] = "159753456";
38                 dtd.Rows.Add(dr4);
39                 DataRow dr41 = dtd.NewRow();
40                 dr41["UserNo"] = 1;
41                 dr41["Phone"] = "951357654";
42                 dtd.Rows.Add(dr41);
43                 DataRow dr42 = dtd.NewRow();
44                 dr42["UserNo"] = 1;
45                 dr42["Phone"] = "987456321";
46                 dtd.Rows.Add(dr42);
47
48                 ds.Tables.Add(dtm);
49                 ds.Tables.Add(dtd);
50                 #endregion

51
52                 //建立Relation
53                 ds.Relations.Add(new DataRelation("UserInfo", ds.Tables["BasicMaster"].Columns["UserNo"], ds.Tables["BasicDetail"].Columns["UserNo"]));
54                 BindingSource bsm = new BindingSource(ds, "BasicMaster");//DataSource為DataSet,DataMember為主表單的TableName
55                 BindingSource bsd = new BindingSource(bsm, "UserInfo");//DataSource為主選單的BindingSource,DataMember為RelationName.
56
57                 gridM.DataSource = bsm;//主表單的BindingSource
58                 gridS.DataSource = bsd;//次表單的BindingSource
59             }

60             catch (Exception ex)
61             {
62                 MessageBox.Show(ex.Message);
63             }

64         }

  從第5行到50行都是準備資料,不是重點,重點在第53行,這行就是在建立主檔跟明細檔之間的關係"Relation",兩個Table要用那個欄位來串起來,以這個範來說,UserNo就是兩個Table的關聯欄位.


  接下來第54行跟第55行分別是主檔跟副檔的BindingSource,基本上看起來差不多,但還是有些許差異,在第54行的主檔部份,可以看到new BindingSource(ds,"BasicMaster"),括號內的第一個參數是DataSet,第 二個為主檔的Table名稱,而第55行的副檔部份就不一樣了,第一個參數放的是主檔的BindingSource,第二個參數則為 DataRelation的名稱,接下來只要把這兩個BindingSource分別丟到主副DataGrid的DataSource即可.




就這麼簡單,Master跟Detail的連動就做好了,接下來就看各位怎麼去運用DataRelation的這個功能囉.




參考資料 :


MSDN DataRelation類別


範例下載 :


MDForm.rar


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

今天是2009年第一天的上班日,但也如同往昔般的一樣忙著工作.

正當眼睛看程式看到一半,手機突然響起.

看了一下來電號碼,耶~不認識的,但我還是接了起來.

我 : 喂~

(此時對方傳來一位老伯伯的台語口音.)

阿伯 : 喂 ~ 我找阿X

(因為聽不清楚,所再問了阿伯一次)

我 : 阿伯你找誰?

阿伯 : 阿華啦,阿華在不在~

我 : 阿伯你打錯了,我不是.

阿伯 : 哦~不好意思,打錯了.


掛完電話,我又開始忙工作的事.

但隔沒多久,電話又響起了,看了一下電話,又是那個阿伯.

我 : 喂~ 阿伯你打錯了.

阿伯 : 我還沒講要找誰,你就知道我打錯了.

我 : @%$^@$%.........

阿伯 : 我要找阿華,阿華在不在~

我 : 我不是阿華,你打錯了.

阿伯:我要找阿華,你不是就不要接啊,等阿華接啊~

我:%#&#$^%#........阿伯,這是我的電話,沒阿華啦.

阿伯:阿華何時把電話給你的?

我 : ........ 這電話是我的,不是誰給我的,阿伯你打幾號啊.

阿伯 : 我就打09XXXXXXXX (耶,是我的號碼啊).

我 : 阿伯,你電話抄錯了,這號碼是我的.

阿伯 : 沒啊,我電話上頭就是這個號碼啊.

我 : .....(電話上面.....你按什麼當時顯示什麼啊),我是說電話薄抄錯啦.

阿伯 : 我看一下,呦~還真的打錯咧,少年耶你真聰明.還知道我打錯.

我 : .......Orz......


跟阿伯玩了很久,好不容易掛斷電話,再把精神回到工作上.

此時電話又響起.

%#&%@.....又是那阿伯.

我 : 阿伯,你不是找到電話了,你又打錯了.

阿伯 : 我知道我打錯了,但我忘了我剛要找誰,阿你記得我剛要找誰嗎?

我 : ~~~~~~~~~~~~~~~~~~阿華啦!


掛完電話,悲劇並沒有結束.



我忘了我剛剛程式看到那.......


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

  2008年真是一個多災多難的一年,全球都受到經濟風暴的影響,公司倒的倒,裁員的裁員,連無薪假這種東西都跑出來了,顏色不能亂選,不然就被挑選邊站的族群對立,東西也不能亂吃,可能會有三聚氰胺,經濟因素,仙草蜜(先炒ME)也感覺怪怪的,連祝賀詞"財源廣進"或"財源滾滾"也不能說,因為今年真的是"裁員廣進","裁員滾滾",每個人都怕的要死,之前週休二日是幸福,現在週休三日不見得更幸福,因為可能是無薪假,美國的華爾街風光不在,台灣的竹科新貴不再貴,每個人都在接受著嚴苛的考驗.


  今年對我來說,也是改變很大的一年,最重要的就是換工作,離開服務三年多的公司,改到現在的公司工作,這也是考慮良多,命運真的是抓弄人,當我還是高中生的時候就想要進ASUS,但願望也遲遲未實現,入社會的第一份工作也不是做電腦相關,反而跑到大陸去工作,在製造業裡打滾,離開公司時,因為某些因素,被"人道"禁止使用我在大陸所學的專業技能,在這樣的情況下,什麼工作都沒辨法找,情緒變的很負面厭世,雖然如此,之後還是克服了這個壓力,開始"尋找與培養"自己的第二專長寫程式,在沒工作的情況下,於資策會上了一年的考,考到人生的第一張MCP證照,也順利的錄取前一個工作,後續工作也持續考照,順利的在三年內考到了MCAD.NET/MCSD.NET/MCDBA,從完成不懂到現在,真的很辛苦,但還是撐下來了,就在又要換工作的同時,朋友曾開玩笑的說,那你不會去ASUS,我還笑答我沒那個本事與福份,就算丟Resume也不會有回應,可是就是那麼的剛好,收到了現在公司的面試通知,當時我還一陣錯愕,面試了兩次,時間都很長,最後順利的進到Pegatron和碩聯和(ASUS剛分出來的公司,2008年也是和碩聯合的元年),說真的,剛開始還真的憺心試用期過不了,因為我寫了3年的WinForm,WebForm很少接觸,就算有,也不深,而現在用的反而是WebForm比較多,可是時間過的很快,試用期不知不覺的過了,公司有不少的學習資源與好同事,所以也學到不少東西,前幾天下班回頭望了一下公司,心中感觸良深,多年前的願望,因為後來走的路線不同而放棄,後來又走回這條路,也進了最初所想要進入的公司,命運就是這樣抓弄人.


  現在整體大環境或許真的很辛苦,但危機也是轉機,沒有時間給人自怨自哎,之前的那段經歷讓我更相信這一點,機會是給準備好的人,即將告別2008,今年的你有成長嗎~

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

  今天一早就收到系統寄來的錯誤訊息通知,一看之下,那不是我上週才上線的嗎?而且錯誤訊息是PK重覆,怎麼可能會發生這樣嚴重的程式撰寫錯誤,第一個直覺就是查看資料庫裡的資料,這程式會同時連往Oracle及MS SQL2005兩種不同的資料庫,進行資料的維護更新,看啊看到,發現資料庫裡的資料"不乾淨",資料的後面跟了空白字串,例如 : "TEST  ",正常來說,資料庫裡的資料應該都是Trim過才放進去的,怎麼會有這樣的資料存在.


  這資料是問題之一,但最後發現一個更怪的情況,同一樣SQL語法,Oracle與MS SQL會有不同的結果,但我個人覺得,Oracle才是合理的結果,MS SQL(SQL 2005)是不對的,以Oracle來說 'TEST' <> 'TEST   ',但MS SQL就神奇了,'TEST' = 'TEST  ',它自動幫我Trim,這法範例如下 :


EX1:


select * from testTB where UsrName='TEST'


這個Oracle與MS SQL回傳的結果一樣


EX2:


select * from testTB where UsrName='TEST  '


Oracle會因為TEST後面多了空白字串,而找不到資料.


MS SQL因為它會自動Trim,結果會同EX1.


 


因為這樣的結果,才導致我PK重覆的錯誤.本來很想再查下去,可是沒權限去碰資料庫,只好放棄,只能說,學到經驗了,下次對MS SQL要注意這種問題.

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

記得8M才升級沒多久,昨天又把網路升級到中華的光世代10M.

當初不直接升10M,主要是因為"線"還沒拉到這邊來,所以只有8M可以申請.

其實8M是夠用啦,但一條線分享給4台電腦在用,有時還是會塞住.

問了一下中華的維修人員才知道家裡離機房約1公里,難怪我8M的線,只能打7折,跑了5.6M左右的成績.

不過我這算不錯了,有聽同事說他家只有5~6折,覺得這就太過份了,應該可以去消基會告中華.

昨天升了光世代10M,也裝了MOD,二話不說,馬上測一下網路速度.

表現還不錯,果然很"實在",沒有打折的情況,實實在在的10M.

MOD畫質是不錯,可能試的時候沒有很忙,所以看起來很流暢,除了一開始會卡一點,後續就沒有了.

但MOD看了一圈,還真的不知道要看什麼,沒多久就轉回去看第四台,畫質好是不錯,但沒有我想看的....

剛升了網路,當然也要調一下自己的系統設定,用ping查了一下MTU,調分享器,再用Tcp Optimizer調了一下作業系統.


  實實在在的10M,用起來果然很快,但總覺得ADSL的速度就有打折的問題是不合理的,雖然它本身的技術的問題,會隨著距離的拉長,損耗漸增,但還是應該依實際使用什麼樣的速度,付什麼樣的錢,而不是我申請什麼樣的速度,就要付什麼樣的錢.

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