★搜Asp.net★(www.soAsp.net),为专业技术文档网站。
包括Asp.net开发技术文档·C#开发技术文档·Access/SQL Server数据库开发技术文档·VB.NET开发技术文档。
还包括·项目实战经验总结·开发经验技巧总结·项目开发心得。
精通LINQ之使用存储过程查询多表数据

  下面的代码实例在LinqDBDataContext类中创建Pr_GetUserAndRole()方法。该方法将调用Pr_GetUserAndRole存储过程,并返回该存储过程的执行结果。由于Pr_GetUserAndRole存储过程返回两种类型的结果(UserInfoRole表),因此,Pr_GetUserAndRole()方法使用ResultType属性指定结果的数据类型(UserInfoRole),并指定返回结果的数据类型为IMultipleResults

[Function(Name = "dbo.Pr_GetUserAndRole")]

[ResultType(typeof(UserInfo))]

[ResultType(typeof(Role))]

public IMultipleResults Pr_GetUserAndRole()

{

IExecuteResult result = this.ExecuteMethodCall(this,((MethodInfo)(MethodInfo.GetCurrentMethod())));

return (IMultipleResults)(result.ReturnValue);

}

上述的Pr_GetUserAndRole()方法调用了Pr_GetUserAndRole存储过程,该存储过程从LinqDB数据库的UserInfoRole表中获取数据。它的程序代码如下:

CREATE PROCEDURE dbo.Pr_GetUserAndRole

AS

SELECT * FROM UserInfo

SELECT * FROM Role

使用存储过程查询多表数据的功能由Sample_08应用程序中的ProcedureQueries.aspx页面实现,它的代码隐藏文件为ProcedureQueries.aspx.aspx.cs

1.创建ProcedureQueries.aspx页面

ProcedureQueries.aspx页面上创建2GridView控件,ID属性的值分别为gvUsergvRoleProcedureQueries.aspx页面的HTML设计代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ProcedureQueries.aspx.cs"

Inherits="ProcedureQueries" %>

<head runat="server"><title>使用存储过程查询多表数据</title></head>

<asp:GridView ID="gvUser" runat="server"></asp:GridView><br />

<asp:GridView ID="gvRole" runat="server"></asp:GridView>

2ProcedureQueries.aspx页面初始化

ProcedureQueries.aspx页面初始化功能由其Page_Load(object sender, EventArgs e)事件实现。该事件调用ShowData()函数使用LINQ执行Pr_GetCategorys存储过程查询UserInfoRole表中的记录,并分别显示在gvUsergvRole控件中。具体步骤如下。

1)创建LinqDBDataContext类的实例db

2)调用Pr_GetUserAndRole()方法执行Pr_GetUserAndRole存储过程获取数据,结果保存为result(数据类型为IMultipleResults)变量。

3)使用GetResult<UserInfo>()方法获取result变量中UserInfo表中的数据,并使用LINQ查询ID列的值小于10的记录,查询结果保存在users变量中。

4)使用GetResult<Role>()方法获取result变量中Role表中的数据,并保存在roles变量中。

5)分别把usersroles变量设置为gvUsergvRole控件的数据源,并绑定控件的数据,显示查询结果。

Page_Load(object sender, EventArgs e)事件和ShowData()函数的程序代码如下:

using System.Data.Linq;

using System.Collections.Generic;

protected void Page_Load(object sender, EventArgs e)

{

if (!Page.IsPostBack){ShowData();}

}

private void ShowData()

{   ///创建LinqDB数据库的数据上下文的实例

LinqDBDataContext db = new LinqDBDataContext(LinqSystem.LinqDBConnectionString);

///获取所有数据

IMultipleResults result = db.Pr_GetUserAndRole();

///获取用户信息

IEnumerable<UserInfo> users = from u in result.GetResult<UserInfo>()

where u.ID < 10

select u;

///获取角色信息

IEnumerable<Role> roles = result.GetResult<Role>();

///绑定控件数据,并显示

gvUser.DataSource = users;

gvUser.DataBind();

gvRole.DataSource = roles;

gvRole.DataBind();

}

ProcedureQueries.aspx页面设置为Sample_08应用程序的起始页面,并运行Sample_08应用程序。ProcedureQueries.aspx页面的初始化界面如图所示,此时,该页面显示UserInfoRole表中的记录。