2012-11-07 403 views
2

我有一個SQL Server Stored Procedure。這個過程有一個輸出參數。 在我的C#.NET應用程序中,我通過SqlHelper.ExecuteDataSet()執行此過程,並返回查詢結果DataSet。 如何在使用SqlHelper.ExecuteDataSet()時從存儲過程過程中獲取輸出參數。 一些文章說我需要使用SqlHelper.ExecuteNonQuery(),但我也需要DataSet使用SqlHelper.ExecuteDataSet()執行SQL Server存儲過程並獲取返回值

這是我的代碼:

 public DataSet GetDataPerTable(string spName, string a, string b, out int c) 
     { 
      try 
      { 
       c = 0; 

       SqlParameter[] spParameter = new SqlParameter[3]; 

       spParameter[0] = new SqlParameter("@a", SqlDbType.Char, 4); 
       spParameter[0].Direction = ParameterDirection.Input; 
       spParameter[0].Value = a; 

       spParameter[1] = new SqlParameter("@b", SqlDbType.Char, 1); 
       spParameter[1].Direction = ParameterDirection.Input; 
       spParameter[1].Value = b; 

       spParameter[2] = new SqlParameter("@c", SqlDbType.Int); 
       spParameter[2].Direction = ParameterDirection.ReturnValue;     
       c = Convert.ToInt32(spParameter[2].Value); 

       return SqlHelper.ExecuteDataset(Configuration.MyConnectionString, CommandType.StoredProcedure, spName, spParameter); 
      } 
      catch (Exception ex) 
      { 

       throw ex; 
      } 
     } 

c變量總是返回0。任何想法?感謝提前:)

我的程序是關於這樣的:

CREATE PROCEDURE [dbo].SPR_MyProcedure (@a Char(4), @bChar(1), @c Int Output) 
SELECT * 
FROM MyTable 
Set @c = 1 

回答

7

@c不是一個返回值,它是一個輸出參數

變化

spParameter[2].Direction = ParameterDirection.ReturnValue; 

spParameter[2].Direction = ParameterDirection.Output; 

另外,你需要調用後設置您的c變量ExecuteDataset 例如:

DataSet dataset = SqlHelper.ExecuteDataset(Configuration.MyConnectionString, CommandType.StoredProcedure, spName, spParameter); 
c=(int)spParameter[2]; 
return dataset;  
+0

我已經把我的存儲過程腳本e :) –

+0

@WillyLazuardi是的 - 這絕對是一個輸出,而不是一個返回值。 – podiluska

+0

謝謝@podiluska,它現在的作品...:--bd –

4

你必須使用ParameterDirection.Output進行參數c。 請參閱Get output parameter value in ADO.NET

ParameterDirection.ReturnValue是整個存儲過程的返回值,默認爲0或在RETURN語句中指定的值。

0

SqlHelper.ExecuteDataSet不返回輸出參數。看到他們r使用的ExecuteNonQuery 每一個例子輸出參數此鏈接

http://www.mediachase.com/documentation/fileuploader/Api/Mediachase.FileUploader.SqlHelper.ExecuteDataset_overload_5.html

看到這些aticles輸出prameter

http://forums.asp.net/t/360456.aspx/1

http://www.codeproject.com/Articles/15666/Data-Access-Application-Block-NET-2-0-Get-Return-V

我希望它可以幫助ü

+0

哦,我錯了。我忘記了ParameterDirection – Annie