2010-11-26 85 views
1

請考慮以下情況。asp.net從proc多個結果集:是否有必要將結果映射到類?如果是這樣,怎麼樣?

您有一個存儲過程返回多結果集 查詢運行報告的目的。

proc也使用表值參數(SQL 2008)。 http://www.sommarskog.se/arrays-in-sql-2008.html#LINQ_EF

這些結果集是隻讀的,這意味着您不必 擔心更新,刪除或插入。

這些結果集不映射到數據庫中的任何表;這些是報告結果,而不是數據庫表的鏡像。現在

,我的背景是ASP經典,而我一直在試圖對所有的.NET數據訪問策略,閱讀起來 ,看來: (1)MS是推動實體框架 (2)MS具有(3)整個話題一直是辯論的主題 (4)項目的環境幫助決定正確的數據訪問策略, 和ORM似乎並未針對此數據訪問方案進行優化 (5)沒有用於映射多個結果集存儲過程的開箱即用解決方案

此外,我正在查找完整控制html輸出,所以如果使用代碼, 只有中繼器和文字將用於數據綁定。

我發現Web Forms編程模型無法提供完整的代碼和內容分離 ,並且可以像asp classic一樣「意大利麪條」。 (MVC的 方法看起來更像ASP經典,但這個項目已經是WebForms的。)

我認爲這將是很容易被具有相同頁面上的數據訪問和內嵌腳本<%%>來實現。 這裏是樣的代碼示例將導致指出:

<% 
' data access (skipping a bunch of code).... 
Dim myDataSet As New DataSet() 
myCommand.Fill(myDataSet) 
'...etc.  

Teachers = myDataSet.Tables(0).Rows 
Students = myDataSet.Tables(1).Rows 
'... etc.%> 

然後

<% If Teachers.Count > 0 Then%> 
<table><% For Each _Teachers In Teachers%> 
    <tr> 
     <td><%= _Teachers(0)%></td> 
     <td><%= _Teachers(1)%></td> 
    </tr><% Next %>  
</table> 
<% Else%>Hey, there's no records.<% End If %> 

(當我嘗試背後下的代碼中的數據訪問分開「保護小組的Page_Load ......」 , 在後面,我在.aspx頁面中使用的代碼中的變量繼續給錯誤: 「[變量]不宣佈它可能無法訪問由於其保護級別。」)

如果結果集從親c不是強類型, 是否是世界末日,可怕的編程實踐,可維護性噩夢, 最糟糕的可能選擇等等?

如果存儲過程的結果集應該是強類型的,那麼最有效的方法是什麼? (我不是 在這個主題找到簡單的教程。)

在此先感謝您的任何幫助。

回答

0

這聽起來像你問你是否應該繼續使用ADO。NET容器或自定義域類爲您的數據。

如果您覺得在顯示之前需要輸入一個類的強類型和一些輸入驗證或應用於數據的其他邏輯,請考慮編寫一個方法將DataTable轉換爲YourClass的集合。否則,如果這是爲了顯示,那麼堅持使用DataTable沒有任何問題。如果您爲其他組件提供接口,或者需要某個類可以提供的功能,請選擇強類型的類。

public IEnumerable<Teacher> ConvertToTeachers(DataTable dt) 
{ 
    foreach (var row in dt.Rows.AsEnumerable()) 
    { 
     //create a teacher from this row. modify row indexers as required. 
     yield return new Teacher{ TeacherName = row["Name"].Value, 
            Location = row["Location"].Value }; 
    } 
} 

在表現層上,考慮利用ASP.NET webforms爲您提供的服務器控件。它們提供了刪除所有循環的數據綁定功能。

  • 確保您的gridview按照您的喜好設計。包含所需數據的正確列:常規綁定字段和超鏈接。

  • 將您的數據綁定到網格。

gridViewTeachers.DataSource = myDataSet.Tables(0).Rows 
gridViewTeachers.DataBind 
+0

感謝回答。 RE:「......考慮編寫一個方法將DataTable轉換爲YourClass的集合」。我想我是一個OOP新手來做我自己的這部分。你認爲你可以提供任何進一步的建議或資源指針? – mg1075 2010-12-11 04:11:53

相關問題