LINQ调用存储过程

  LINQ to SQL能够调用存储过程从数据库中查询数据。为了方便开发人员调用存储过程,LINQ to SQL将为存储过程创建一个方法,并指定该方法调用的存储过程,以及传入的参数和返回值。下面的代码实例在LinqDBDataContext类中创建Pr_GetCategorys()方法。该方法将调用Pr_GetCategorys存储过程,并返回该存储过程的执行结果。其中,结果的数据类型为ISingleResult<Pr_GetCategorysResult>。

[Function(Name="dbo.Pr_GetCategorys")]
public ISingleResult<Pr_GetCategorysResult> Pr_GetCategorys()
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())));
return ((ISingleResult<Pr_GetCategorysResult>)(result.ReturnValue));
}

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

CREATE PROCEDURE [dbo].[Pr_GetCategorys]
AS
SELECT
A.ID,A.Name,A.ParentID,A.ShowOrder,A.Remark,
ISNULL((SELECT Name FROM Category AS B WHERE A.ParentID = B.ID),null) AS ParentName,
ISNULL((SELECT COUNT(*) FROM Category AS C WHERE A.ID = c.ParentID),0) AS SubCount,
ISNULL((SELECT COUNT(*) FROM Category AS D WHERE A.ParentID = D.ParentID),0) AS SiblingCount
FROM Category AS A
ORDER BY ParentID,ShowOrder

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

1.创建ProcedureQuery.aspx页面

  在ProcedureQuery.aspx页面上创建一个GridView控件, ID属性的值为gvData。ProcedureQuery.aspx页面的HTML设计代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ProcedureQuery.aspx.cs"
Inherits="ProcedureQuery" %>
<head runat="server"><title>使用存储过程查询单表数据</title></head>
<asp:GridView ID="gvData" runat="server"></asp:GridView>

2.ProcedureQuery.aspx页面初始化

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

(1)创建LinqDBDataContext类的实例db。

(2)调用Pr_GetCategorys()方法执行Pr_GetCategorys存储过程获取数据,并使用LINQ查询ID列的值大于10且小于30的记录,查询结果保存在result变量中。

(3)把result变量设置为GridView控件gvData的数据源,并绑定该控件的数据,显示查询结果。

  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);
///获取所有角色
var result = from c in db.Pr_GetCategorys()
where c.ID > 10 && c.ID < 30
select c;
///绑定控件数据,并显示
gvData.DataSource = result;
gvData.DataBind();
}

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

 

来源:http://blog.csdn.net/linqmail/article/details/2321735

加支付宝好友偷能量挖...


评论(0)网络
阅读(240)喜欢(0)asp.net-linq