2009-02-05 40 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

相关问题