程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Linq to SQL之使用存儲過程(1)

Linq to SQL之使用存儲過程(1)

編輯:關於.NET

本文以Northwind數據庫為例,說說Linq to SQL中是怎樣使用存儲過程。

首先我們創建一個存儲過程:

 create procedure dbo.linqDemo1
  as
   select * from customers

打開dbml設計器,在Server Explorer裡面找個這個存儲過程,把它拖拽到設計器裡面,可以看到這個 存儲過程被映射為方法了

這裡有一點值得注意,(以存儲過程linqDemo1為例)默認情況下,設計器對存儲過程進行分析,將所 有輸出構造成一個結果類,運行該存儲過程返回的就是這個類的對象集合。看看linqDemo1自動生成的代 碼:

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

LinqDemo1Result類就是生成的結果類,由於返回的customer表,該類的所有屬性其實和customer的一 模一樣。 所以剛才拖拽存儲過程的時候,如果把它拖拽到Customer類圖的上面而不是周圍的空白區域, 生成的代碼如下:

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

可以看到,它將存儲過程返回的結果用Customer對象的集合來表示,而非創建一個自定義的結果類。

那麼怎樣運行存儲過程呢?就和調用普通的成員方法一樣,Linq to SQL將它映射到數據庫中的存儲過 程:

 NorthwindDataContext ctx = new NorthwindDataContext();
  var results = ctx.linqDemo1();

是不是很簡單?下面再來看看怎樣調用帶參數的存儲過程

create procedure dbo.linqDemo2
   @cID varchar(5)
as
   select * from customers where customerID = @cID

然後利用設計器自動映射該存儲過程,帶參數的存儲過程也就相應的映射為帶參數的成員函數,怎樣 調用就不多說了。

 [Function(Name="dbo.linqDemo2")]
  public ISingleResult<Customer> linqDemo2([Parameter(DbType="VarChar(5)")]  string cID) {
   IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo) (MethodInfo.GetCurrentMethod())), cID);
   return ((ISingleResult<Customer>)(result.ReturnValue));
  }

如果我們使用帶output參數的存儲過程呢?

create procedure dbo.linqDemo3
   @cID varchar(5),
   @msgCode int output
as
   select * from customers where customerID = @cID
   set @msgCode = 50

生成的成員函數是下面這樣:

 [Function(Name="dbo.linqDemo3")]
  public ISingleResult<Customer> linqDemo3([Parameter(DbType="VarChar(5)")]  string cID,
    [Parameter(DbType="Int")] ref System.Nullable<int> msgCode) {
   IExecuteResult result = this.ExecuteMethodCall(this,
     ((MethodInfo)(MethodInfo.GetCurrentMethod())), cID, msgCode);
    msgCode = ((System.Nullable<int>)(result.GetParameterValue(1)));
   return ((ISingleResult<Customer>)(result.ReturnValue));
  }

可以看到它使用一個ref參數來保存返回參數的值,如下調用:

 NorthwindDataContext ctx = new NorthwindDataContext();
  int? output = 0;
  var results = ctx.linqDemo3("ALFKI", ref output);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved