2009-02-05 35 views
2

通常情況下,當你想直接通過LINQ到SQL來調用存儲過程,你可以使用executeQuery方法:是否可以使用ExecuteQuery <T>的輸出參數?

result = dc.ExecuteQuery<MyTable>("Exec myStoredProcedure"); 

如果你需要用參數來調用它,你可以通過字符串替換添加它們:

string query = "Exec myStoredProcedure "; 
for (int i = 0; i < parameters.Count - 1; i++) { 
    query += " {" + i + "},"; 
} 
query = query.TrimEnd(','); 
result = dc.ExecuteQuery<MyTable>(query, parameters); 

但是如果其中一個參數是輸出變量呢?程序運行後可以返回值嗎?

回答

1

Alper Ozcetin's是正確的,你可以在* .dbml中映射StoredProcedures,並且可以使用StoredProcedures作爲Method。

以下是演示做這個用的AdventureWorks數據庫,並同時適用於VS2008和VS2010

Wtih的AdventureWorks我創建了以下PROC

CREATE PROC sp_test (@City Nvarchar(60) , @AddressID int out ) 
AS 
SELECT TOP 10 * FROM Person.Address where City = @City 
select top 1 @AddressID = AddressID FROM Person.Address where City = @City 

然後我加入sp_test對它的DBML,並寫了下面的程序

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data.Linq; 

namespace Test 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 


      DataClasses1DataContext dc = new DataClasses1DataContext("SomeSQLConnection); 

      int? AddressID = null; 
      ISingleResult<sp_testResult> result = dc.sp_test("Seattle", ref AddressID); 

      foreach (sp_testResult addr in result) 
      { 
       Console.WriteLine("{0} : {1}", addr.AddressID, addr.AddressLine1); 
      } 
      Console.WriteLine(AddressID); 


     } 
    } 
} 

這將導致以下輸出中

23 : 6657 Sand Pointe Lane 
91 : 7166 Brock Lane 
92 : 7126 Ending Ct. 
93 : 4598 Manila Avenue 
94 : 5666 Hazelnut Lane 
95 : 1220 Bradford Way 
96 : 5375 Clearland Circle 
97 : 2639 Anchor Court 
98 : 502 Alexander Pl. 
99 : 5802 Ampersand Drive 
13079 

你會發現輸入到sp_test對它方法是ref

0

我不知道,但你可以嘗試在查詢聲明變量,把它作爲輸出參數,然後選擇它:

//assuming you out parameter is integer 
string query = "DECLARE @OUT INT "; 
query += " Exec myStoredProcedure "; 
for (int i = 0; i < parameters.Count - 1; i++) { 
    query += " {" + i + "},"; 
} 
//assuming the output parameter is the last in the list 
query += " @OUT OUT "; 
//select value from out param after sp execution 
query += " SELECT @OUT" 
0

你不需要寫原始SQL在StoredProcedures的executeQuery。您可以在* .dbml中映射StoredProcedures,並且可以使用StoredProcedures作爲方法。

+0

基於DBML存儲過程不支持輸出參數,據我可以告訴。 – 2009-05-15 21:22:25

相關問題