台灣最大程式設計社群網站
線上人數
1183
 
會員總數:246274
討論主題:189809
歡迎您免費加入會員
討論區列表 >> ASP.NET >> [NET]離線式做法
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
[NET]離線式做法
價值 : 0 QP  點閱數:2982 回應數:10
樓主

大眼妹
初學者
14 1
52 1
發送站內信

各位大大好,我剛接觸ASP.NET不久,有點疑問想請個位給點意見:
我想要製作一隻程式(假設為客戶資料維護)畫面如下
<img src="http://www.kirk.idv.tw/test.gif">
當進入此頁面時就會show出所有客戶資料最新的那筆,之後所有的新增修改刪除等動作皆在同頁面執行

為了減低server的負擔,當第一次進入此頁面時,(假設目前客戶資料總共200筆),即取回200客戶資料後與資料庫斷線,之後的所有動作包含(新增修改刪除、上下筆資料移動等)皆在client執行,等到user點選"確定更動至server",才會與server端建立連線然後將更動過的資料在資料庫上批次處理。

例如:
1.目前我將資料移到第二筆客戶資料→修改→儲存
2.資料移到第四筆客戶資料→刪除→儲存
3.資料移到第六筆資料→修改→儲存
4.新增兩筆資料→儲存
(以上步驟皆是在離線狀態,對著已取得的Data作處理)
5.點選→確定更動至server
(此時與資料庫建立連線,將剛剛client更動過的資料全部傳到server,資料庫一次處理剛剛的所有更動)

請問,以上這種做法應該採用何種方式?
是要將所有更動存成xml送上server?
還是使用dataset or 其他方法ㄋ?

本篇文章發表於2002-07-24 16:28
1樓
回應

Allen
捐贈 VP 給 Allen 檢舉此回應
我是不會啦, 但請你要一併考慮一下:
1. 若下載後,有二人同時修改同一筆記錄, 要如何解決?
2. 若有一人修改客戶, 另一人將它刪除, 要如何解決?
3. 如果二人下載後都新增客戶, 你的Primary Key要如何避免重覆 ?
4. 要刪除客戶前, 若還要檢查其他table的資料, 那麼, 是否也要將其他資料一併下載回來?
等你真的做出你要的功能, 也請考慮一下上述的狀況

此外, 如果客戶有2000筆, 你只要改一筆, 那麼, 直接線上修改似乎也比較簡單
我並非是指你的做法不好哦, 只是提醒你有這些狀況要一併考慮。
本篇文章回覆於2002-07-24 17:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

烤豬排
檢舉此回應
如果不考慮兩人以上同時修改資料的問題..

Client 跟 Server 間資料溝通的格式..

當然是用 XML 會比較好點..

至少在Parse資料格式時.. 比較簡單..
本篇文章回覆於2002-07-24 17:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

大眼妹
檢舉此回應
1. 若下載後,有二人同時修改同一筆記錄, 要如何解決?
2. 若有一人修改客戶, 另一人將它刪除, 要如何解決?
3. 如果二人下載後都新增客戶, 你的Primary Key要如何避免重覆 ?
4. 要刪除客戶前, 若還要檢查其他table的資料, 那麼, 是否也要將其他資料一併下載回來?
等你真的做出你要的功能, 也請考慮一下上述的狀況

此外, 如果客戶有2000筆, 你只要改一筆, 那麼, 直接線上修改似乎也比較簡單
回應樓上:
1. 當與資料庫重建連線進行處理時,使用Transaction,所以若有衝突產生會RollBack,這應該可以解決1跟2點
3. 當要新增的時候Primary Key產生的時機為寫入資料的當下,而不是當client要求資料的時候就給予的,所以不會重複
4. yes
5. 也許舉維護客戶資料的例子不是很好,假設例子為:線上訂單
客戶對同一項產品也許有幾十筆的訂單資料show在同一頁上(類似DataGrid),如果這訂單有100筆,每頁顯示10筆,我再第一頁對5筆訂單修改刪除,到第二頁對兩筆訂單修改刪除,且這時候我回到第一頁,剛剛修改的資料都還保留,也還可以繼續作任何更動,這所有的動作都在client處理,等到我點選"確定更動至server才將所有資料一次批次送上server處理"。

以前用asp的做法
1. 所有資料寫成陣列(包含recordset),等到要與server連線時再把這些陣列轉回字串傳回server,缺點:維護超不容易
2. (目前)是把所有動作都寫成xml

這種方式的好處是
1. 對server來說,負荷減低
2. 對client來說,速度超快,例如上下頁、新增修改等...根本不需要連回server,就像單機版的程式

目前要轉寫.net,不知道應該如何下手,所以希望有經驗的前輩能提供小妹一點意見 ^^~謝啦!
本篇文章回覆於2002-07-24 17:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

sabcat
檢舉此回應
用DataSet即可...DataSet本身即是離線式的存取...
不過現在不太確定DataReader是否也是離線存取..因為有段時間沒用了

DataSet本身即是一個小型的暫存資料庫..
當由資料源取回資料後...其後的所有的異動都是在DataSet裡進行..
直到呼叫對應的方法後才會將變動的部份寫回資料源..
(對不起..真的忘了是呼叫那一個方法了...您可查閱SDK裡的文件..應可找到)
本篇文章回覆於2002-07-24 19:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

烤豬排
檢舉此回應
Client端的環境是否一致? 可以限制Client端環境?

如果可以限制Client端都是使用 IE 5.5 or 6.0 以上..

那可以使用的工具就比較多..

發展與維護都快.. 除錯也比較容易..

沒有好的工具下.. 要求高品質的功能.. 畢竟是件難度高的任務..
本篇文章回覆於2002-07-24 19:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

song
檢舉此回應
1:使用XML
2:XML封裝內容包含 (oldValue,newValue)(取得資料,更動後資料)
3:Sever 處理交易(比對currentValue)資料庫現值
4:交易錯誤處理
  
  ps:您要注意並非所有作業都適合如此方式

song..
本篇文章回覆於2002-07-24 20:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

大眼妹
檢舉此回應
所以我還是要先在client端把所有狀態寫成xml儲存好,然後要異動資料庫的時候在丟上去囉?
ASP.NET沒有提供什麼方法可供使用嗎?

我所知道的不管是DataSet DataTable等...其實他底層傳遞的都是xml,難道我無法在client直接操作dataset?

ADO.NET可用離線式的RecordSet,而DataSet可比擬成Client端的小型資料庫,所以我有可能所有的新增修改刪除都對dataset操作嗎?等到要異動到server的資料庫時,再把這個dataset丟回去? 

還是說還是要像以前那樣,整理好所有的recordset等等,xxx.Save 成xml格式,到時候再把這個xml轉回字串丟回server?

就我說知^^,以我得到的資訊來說,ADO.NET的設計理念是已離線的資料為基礎,可以在本機上對本機的資料集(DataSet)進行資料的新增、修改、刪除,然後在更新回真正的資料來源,可是不管是市面上或是網路上的文章、教學、範例似乎都沒有實做這點,大多是單筆或是直接對資料庫做異動,所以我也很煩惱...>"<
本篇文章回覆於2002-07-24 23:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

烤豬排
檢舉此回應
我對.Net不熟.. 不知道用它來設計UI有沒有提供較好的方法..

但是我覺得.. Client端瀏覽器上的UI.. 免不了都是使用DHTML..

使用.Net就能不接觸DHTML ??

如果一定要使用DHTML..

我覺得這問題.. 大概就是用DHTML + XMLDom比較快解決了..
本篇文章回覆於2002-07-24 23:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

test
檢舉此回應
test
本篇文章回覆於2002-08-09 20:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

David
檢舉此回應
要不要考慮用 WebService??? ^_^ 
把對資料庫儲存的動作封裝成WebService,當你要從 Client 端寫入的時候,一次寫回Server端即可,可以解決這個問題(表面上),但我有一些不解如下:

首先有一個問題,您用 ASP.NET 寫 Client 端的應用程式嗎?還是用 VB.NET 寫呢?
就剛才那個圖檔畫面而言,看起來本身就是網頁,這樣,所有的工作都在後端做,基本上不太可能在前端(User)端有個 TempTable 的,更別說是儲存了一陣子之後把 buffer 丟回 Server端,因此,在 Web應用程式(Web-Solutions)的模式下,基本上這個問題應該是不成立的,因為所有的IO其實都在後端(Server)上做才對啊,除非,該程式是 Windows應用程式(Windows-Based)...
本篇文章回覆於2002-08-09 20:26
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.