2010-11-26 39 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

相关问题