這是一個慘烈的教訓,我搞了一天半.
我始終不明白,爲什麼我確實地在 DataSet 裡的 DataTable 去刪掉了一筆 DataRow, 但 Update 的時候卻無法成功?
Open source 就是有這好處,於是我開始 Trace mono 的 ByteFX.Data.
大致看了一下,發現幾件有趣的事情:
*在我們呼叫 xxxDataAdapter.Update 的時候,其實是呼叫 DbDataAdapter.Update.各個 Provider 並不負責這件事情.各個 Provider 是負責提供必要的資訊給 DbDataAdapter, 讓她去完成這件事情.
*xxxDataAdpater 的 DeleteCommand, InsertCommand, UpdateCommand 在
xxxDataAdapter da = new xxxDataAdapter(); xxxCommandBuilder xcb = new xxxCommandBuilder( da ); 的時候並不會被馬上組出來,而是在內部被呼叫 RowUpdating (真正要 Update)的時候,才被組合出來.
這些都跟主旨無關.回到正題.爲什麼無法刪除呢??
我使用的語法是這樣子,在我找到我要刪除的 DataRow 之後,我使用的是 DataTable.Rows.Remove( 我要刪除的row ).
很不幸,這會直接從 DataRowCollection 裡面直接刪掉.
但是 DbDataAdapter.Update 依賴的是 DataRowCollection 裡面各個 Row 的 RowState 來判定要新增,修改或是刪除. 如果 DataRowCollection 裡面並沒有這個 DataRow,那麼 DbDataAdapter.Update 也不會知道這個 DataRow 需要被刪除.
因此你在找到要刪除的 DataRow 之後,得用 DataRow.Delete() 才行.
這邊需要特別注意的是, Delete() 之後,不要使用 DataTable.AcceptChanges(),這個命令同樣會使得 DataRowCollection 採取和 Remove() 一樣的動作.
Delete() 之後再呼叫 xxxDataAdapter.Update(), 這樣就可以順利完成刪除動作了.
PageIndexChanged on mono 1.1.9.2
FeedGator之二
走錯了很多路,最後在參考了Patterns of Enterprise Application Architecture
之後,總算是確定.
否則以我胡思亂想的個性,可能還在亂寫中(真的寫的很亂,慚愧…).
直接利用人家已經想好的 Pattern, 整個大方向會比較快確定下來.
大致的 Class diagram 就長這樣.

喝酒小遊戲之二
非常接近這個小遊戲
取兩顆骰子,中間放一公杯,大家輪流骰,以點數的加總來決定加酒,減酒,喝
6 點代表回轉,本來順時鐘,則改為逆時鐘;反之亦然.
7 點代表往公杯添酒
8 點代表可以減少公杯的酒
9 點代表喝!!把公杯的酒全都喝完!!!
但是不用骰子,使用比較容易取得的撲克牌.
於是就變成翻牌的遊戲,每人輪流從牌堆中翻牌,點數代表意義相同.
以下是我的想法…
想搞刺激的話,可以把牌減少.
想多點樂趣的話,可以再爲一些特殊牌增加特殊意義,如: J 換酒 , Q 表示所有女生分掉, K 表示所有男生分掉…等等的.
蘋果日報圖表
今天亂逛的時候看到這篇文章: “Richy’s Blog(最近很忙): 何止100種?”,真是令人噴飯…
直接想看相簿的話,在這裡:蘋果日報示意圖
關於 blog 這個分類
阿比+啤酒
前幾週,跟公司同事中午出去吃熱炒.
我們點了炒麵,但這不是重點.
隔壁桌的先生頻頻去拿啤酒,可是我看酒杯裡的顏色就是怪.
我還以為是青島啤酒本身就是這顏色.
後來仔細一看,才發現她們加了阿比.
阿比還真是好用啊.
不知道好不好喝說.
結婚三周年前夕
今天看到這篇新聞:
《讀報新聞》警訊! 半數已婚民眾 覺得不幸福,這透露幾個訊息:
1.對婚姻抱持不切實際的幻想.
2.媒體言過其實,統計資料向來如此,此外這篇報導也沒有說明資料來源以及取樣範圍與標準,所以僅能參考.
3.生活大不易,賺的少,花的多.
不過結婚就是這樣囉.
我自己在婚後有不少牢騷,有些朋友甚或親人對我的牢騷相當驚訝.
但那主要是因為我少了許多獨處時間的緣故,大家不用驚慌呀~~
女人都要人陪,這是一定的啊~
想起昨天看到這篇:I love you not because of who you are…,裡面有句話,也是我想在三週年結婚紀念前夕對我太太說的,”You complete me. 謝謝你,蔡太太~”
RSS 時刻表 (feedgator)
目的:收集 feed, 然後依照時間顯示最近的 50 筆
主要部份:
1. Crawler, 抓取 feed, 並安插到 Database
1.1 Remover, 週期性刪除,刪除資料庫中超過 30 天或特定天數的 feeds ( This is setting is in web.config, FeedExpiredDays )
2. 主頁面, 從 database 取資料出來顯示
3. Manage:
3.1 新增 feed url
3.2 編輯/修改 feed url 資料
Table 規劃:
feeditem ( author, guid, link, pubdate, title )
feedurls ( link, lastbuild )
其他事項:
1. 頁面美觀, 可以參考 lilina; 另外記得 DataGrid 可以做 grouping.
2. manage 部份可以引進 tab panel, 這樣就可以把 add 與 browse/edit/delete 放在一起了
3. 是否要支援 log4net 來存放 crawler 的 log??
4. 支援 atom?
後記:
其實這個小 project 已經進行一段時間了,都是間斷的寫…到現在還沒弄完…
寫的過程裡面學到不少東西:
1. Mono xsp 可以直接在 httpd 的 configuration 中設置就好(/etc/httpd/conf.d/mono.conf), httpd 會負責把 xsp(mod-mono-server) 叫起來.沒有以前那麼麻煩了.
2. Mono xsp 的 default encoding 需要在環境變數中指定, mod_mono 的設定裡面可以指定 (MonoSetEnv “LANG=en_US.UTF-8”),否則將會是 Apache 的預設 encoding (ASCII)
3. RSS 的 pubdate 用的是 universal time, 而非 local time.
4. MySQL 3.x 不支援 unicode, 或者應該說, bytefx.Data mysql data provider 會依賴 MySQL database 內的 codepage 設定來決定是否要轉碼,而 php mysql library 並不會.
5. nHibernate 尚未移植到 Mono
參考資料:
*Mono
*Mod_mono”
*RSS.NET: An open-source .NET class library for RSS feeds
禽流感與克流感
這裡摘錄兩篇我覺得很中肯的文章.
一篇是以西醫學理剖析禽流感與克流感的文章
另外一篇則是以中醫學理告訴你該怎麼強化自身的免疫能力來對抗流行感冒病毒.
TSUBASA 的台東苦悶筆記: 誰該用克流感?
http://blog.tsubasa.com.tw/archives/003870.html
紅塵一隅間拾得 » [轉錄] 禽流感與流感(民眾不用驚慌)
http://greenisland.csie.nctu.edu.tw/wp/2005/10/18/384/