2012-06-03 59 views
0

所以我不確定是否有更好的方法來做到這一點,但這是我目前的設置。ASP.NET:如何通過存儲過程從SQL Server中檢索信息?

  1. 創建一個表示我的數據庫表結構的XSD文件。
  2. 創建一個類文件來保存我的功能,如下面的一個。

代碼示例:

Public Function GetUser(ByVal UserID As String) As xsdUser.UserDataTable 

     Dim SqlConn As New SqlConnection(ConfigurationManager.ConnectionStrings("MyDatabase").ConnectionString) 
     Dim SqlCom = New SqlCommand("User_Retrieve", SqlConn) 
     Dim Adapter As SqlDataAdapter 
     Dim UserDT As New xsdUser.UserDataTable 

     Using SqlCom 
      SqlCom.Parameters.Add(New SqlParameter("@I_UserID", SqlDbType.NVarChar, 4)).Value = UserID 
      Adapter = New SqlDataAdapter(SqlCom) 
      Adapter.Fill(UserDT) 
     End Using 

     If UserDT IsNot Nothing AndAlso UserDT.Rows.Count > 0 Then  
      'Return DataTable here or I guess DataRow since there should just be one. 
     Else 
      'Handle Error here if there is no row 
     End If 
End Function 

現在看來奇怪,我有兩個文件做什麼,應該只包含一個文件中。我覺得我應該有一個名爲「User」的類文件,並在其中具有成員變量以及上面的類函數。但是我看到的所有教程都使用這些數據表。最重要的是,我不知道如何在函數結尾處理if語句。我不認爲我想要返回整個DataTable,因爲我應該只有一行,而且我也不知道如果我的函數應該返回一個數據表,我將如何處理一個錯誤。我想我可以返回一個空的,然後如果我的代碼中的表是空的,那麼我會在那裏處理它,但是這似乎也很麻煩。

所以,任何人都可以清除一些這些東西?這是從存儲過程中檢索信息的常用方法嗎?或者有沒有我在搜索結果中看不到的最新方法?

謝謝!

+2

請不要用類型名稱命名變量。這很令人困惑 - – Steve

+0

@Steve,抱歉,我認爲我修改了所有的東西。將來要記住這一點。謝謝。 – daveomcd

回答

1

返回UserDataTable是完全可以接受的。即使它只包含一行。 看起來不合乎規律的唯一事情是檢查此方法內屬於比用戶界面更低層的結果。另外請注意,你不需要檢查UserDataTable是否沒有任何內容。

而且我認爲這條線是必需的

SqlCom.CommandType = CommandType.StoredProcedure 
+0

謝謝!也忘記了這一點。那麼如果這樣做就這樣做。只是看起來愚蠢的做一個xsd,並只有函數的類文件。我覺得應該有一個文件解決方案。感謝您提供的信息和有用的提示! – daveomcd

1

你會用一大堆的文件,並在兩個或多個組件(類庫)可能傳播的功能來結束,所以不要擔心這一點。您可以返回一個數據表,並拋出一個異常(在您的代碼示例中的ELSE開關中),指出某種錯誤。

你可以返回一個數據表,但問題是「什麼是最有用的接口」?考慮任何使用這種方法的人都必須知道如何將這個數據表翻譯成概念性的「用戶」(檢查表中是否只有一行,從用戶名字段中獲取用戶名等)。

datatable是所謂的"Table Module" pattern的實現。當你的應用建立非常簡單的業務邏輯時,這非常有用,而將數據庫實體映射到面向對象的實體的麻煩並不值得。對於在.net中工作的頭幾年,我使用了數據表格,但是除了我只需要顯示數據網格的場景之外,他們對如何實現非對象定向感到沮喪:實際上,您不得不總是處理數據庫行,而不是「用戶」或「汽車」或「購物車」或其他映射到您正在建模的現實世界場景的實體。一旦應用程序變得有點複雜,所有這些數據表,數據表視圖,表格適配器等都會變得非常混亂(至少在我的經驗中)。簡而言之,我將創建一個「User」類,將函數的返回類型更改爲「User」,並處理檢索方法中的「User」實例所需的所有數據庫/驗證邏輯。您可以繼續使用您已創建的數據集來拉取「用戶」相關數據,然後驗證返回的內容並從中創建一個「用戶」實例。你引用的「更新的方法」是一個對象關係映射器,就像實體框架或NHibernate一樣。

相關問題