這篇文章主要介紹在裝置中訪問本機資料庫的一種方法,通過使用SqlCeResultSet方式來更快、更有效訪問資料庫。
通過使用資料來源來操作資料庫訪問,一般使用DataSet和SqlCeResultSet
到底選擇哪一個更好呢?
DataSet和SqlCeResultSet都能作為資料來源用在資料繫結,或者就直接作為操作資料庫的一種方法,到底它們有哪些差異呢?DataSet對象的功能非常豐富,而且可以將資料存放區在不同的DataTable中,其中每一個都由Column組成,而每行資料則由DataRow來描述。DataSet還能用於對應表的資料約束(是否為空白等),還可以描述表之間的關係(主外鍵對應),類似於一個關係型的資料庫。能夠儲存所有從資料庫來的資料,並且可以將改變的值儲存起來,並由行狀態來區別,可以臨時儲存資料。
相對而言,SqlCeResultSet有很大不同,它不儲存資料,可以直接讀取資料、也可以直接更新資料,所以說是一個輕量型的Data Access Objects。
DataSet應用可以用作分布式程式、離線訪問程式,用來資料傳遞。
在記憶體有限的裝置中,訪問本地的資料庫,使用DataSet就很大的浪費資源了,此時SqlCeResultSet就有了很好的用武之地了。可以將SqlCeResultSet看成為一個功能的組合:DataSet 的可更新性和可滾動性以及與 SqlCeDataReader 類似的效能。
程式示範:
通過Get Data來讀取資料,然後可以New、Update、Delete資料。
效果如下:
新增了1條SysNo為12的記錄。
選擇了SysNo為6的一行,按Update,然後該行的Qty和Price已發生變化。
選擇SysNo為9的記錄,按Delete,這該行被刪除。
示範效果很簡單,代碼也很簡單。
選擇一個本機資料庫,然後在工程中添加一個DataSet,選擇好訪問的表。在工程介面,選擇好DataSet的XSD檔案,然後在屬性介面,修改Custom Tool(自訂工具)改為MSResultSetGenerator,這樣DataSet就會改為SqlCeResultSet了,非常方便。而且產生的SqlCeResultSet為強型別的。
在Form_Load事件中先將對象執行個體化,傳入連接字串和操作方式。
1 private void Form1_Load(object sender, EventArgs e)
2 {
3 orderSet = new DeviceSQLDemo2.DBResultSets.OrdersResultSet(connString, ResultSetOptions.Scrollable | ResultSetOptions.Sensitive | ResultSetOptions.Updatable);
4 }
在綁定資料來源時,只需要用SqlCeResultSet綁定一個資料來源,在綁定到控制項即可。
1 BindingSource bs = new BindingSource();
2 orderSet.Bind(bs);
3 this.dataGrid1.DataSource = bs;
新增時,只需要使用Add表名Record即可,修改和刪除時,先要使用ReadAbsolute方法,先將遊標移到對應行。
修改操作只需要對SqlCeReusltSet對象的屬性修改即可,然後使用update方法,就會立刻更新資料庫。
刪除操作則使用Delete方法就可以刪除遊標所在行了。
本文主要介紹SqlCeResultSet的使用方法,使得大家能夠在操作本機資料庫時,提供者的效能。
代碼下載:DeviceSQLDemo2.rar
開發環境:VS2008+WM6.0
Author:AppleSeeker
Date:2008-08-12