程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 關於強類型DataSet的一些小建議

關於強類型DataSet的一些小建議

編輯:關於.NET

強類型的DataSet可以幫助我們快速的建立數據訪問層,它的簡易性使得我們可以在小的項目中廣泛的 使用它。但是它也有一些小的缺陷,這裡和大家共同討論下它到底有哪些缺陷,以及我們怎麼去避免這些 問題。

1) 在一個query中,它只支持對本表的操作,不支持對多表的操作。在這種情況下,我們可以自己寫 一個stored procedure,然後新建一個TableAdapter,這樣它便會幫我們生成一個新的邏輯實體表,表內 存儲的是stored procedure中返回的列。

2) 數據庫端的任何改動都不會自動update到強類型的DataSet. 這個功能可能會在以後的版本中得到 解決,在ORCAS中,強類型DataSet和LINQ仍然都沒有實現自動更新schema的功能。既然它不能自動更新 schema,我們只能手動刪除這個表然後重新添加這個表(手動改字段的屬性也可以,但是容易造成錯誤)。 這樣的話所有寫的query都將會丟失。為了避免這樣的情況,我們可以將所有的query寫成存儲過程,這樣 即使在表刪除的情況下,我們仍然可以輕松再添加一遍。

3) 強類型的DataSet在獲取存儲過程的返回值(e.g. return 1)方面有點問題。我們不能方便的像函數 一樣得到 int returnValue = (int) da.CallSP(); 為了得到它的返回值,我們需要實現一個生成的 TableAdapter的partial類,然後加上這個自定義的方法:

Code

partial class UsersTableAdapter
{
   public object GetReturnValue(int commandIndex)
   {
     return this.CommandCollection[commandIndex].Parameters[0].Value;
   }
}

這個commandIndex的值就是你的方法所在的index,如下示例中index是1(index是從0開始算起):

現在我們便可通過如下代碼來得到返回值:

Code

da.CallSP(xx, xx);
int returnValue = int.Parse(da.GetReturnValue(2).ToString());

當然,在ORCAS中,我們也有更好的選擇,那就是用LINQ-SQL。它是.NET的一個ORM工具,它可以通過 LINQ query自動為你生成SQL腳本,讓你更加快速的建立數據訪問層,所支持的功能更加的強大。不過 在.NET Framework 3.5 SP1中,它將被LINQ-Entity所替代。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved