2014-11-17 55 views
0

我的存儲過程: -從存儲過程C#發送輸出參數並獲得多個數據集

DECLARE @return_value int, 
     @Sum int, 
     @Total float 

EXEC @return_value = [dbo].[mysamplesp] 
     @sd = '2014-09-23 00:00:00.000', 
     @ed = '2014-09-30 00:00:00.000', 
     @ID = '40494', 
     @sp = NULL, 
     @Ct = NULL, 
     @GD = NULL, 
     @Sum = @Sum OUTPUT, 
     @Total = @Total OUTPUT 

SELECT @Sum as N'@Sum', 
     @Total as N'@Total' 

SELECT 'Return Value' = @return_value 

執行結果; -

dataset1-

col1 col2 col3 col4 col5 

datase2-

@Sum @Total 

數據集的3-

return_value 

我的C#實現: -

Dictionary<string, object> storage = new Dictionary<string, object>(); 
       storage.Add("sd", "2014-09-23 00:00:00.000"); 
       storage.Add("ed", "2014-09-30 00:00:00.000"); 
       storage.Add("ID", "40494"); 
       storage.Add("Sp", null); 
       storage.Add("Ct", null); 
       storage.Add("GD", null); 
       storage.Add("Sum", null); 
       storage.Add("Total", null); 

var spReturn = new Data(Data.DBKEY).ExecuteSotredProcedure("mysamplesp", storage); 

。 。 。問:如何使用C#中的字典將輸出參數發送到Sp?可能嗎? Q2:如何從SP中獲得多個數據集作爲結果?

回答

2

對於Q1,應該指定SQL參數directionParameterDirection.Output

對於Q2,使用SqlDataReader

var cmd = sqlConnection.CreateCommand(); 
cmd.CommandText = "[dbo].[mysamplesp]"; 
cmd.CommandType = CommandType.StoredProcedure; 
sqlConnection.Open(); 
var reader = cmd.ExecuteReader(); 
// process first dataset 
reader.NextResult(); 
// process second dataset 
// etc 
+0

我加入像下面的代碼 - 'cmd.Parameters [ 「總和」]方向= ParameterDirection。 。輸出; cmd.Parameters [「Total」]。Direction = ParameterDirection.Output;'但是獲取String [6]:Size屬性的無效大小爲0。 ' – flute

+1

試着設置你的輸出參數的'Size'屬性,如 cmd.Parameters [「Sum」]。Size = 5'。請參閱[此鏈接](http://stackoverflow.com/questions/17494990/the-size-property-has-an-invalid-size-of-0) – MantasG

+0

但我無法從SP獲取第二個數據集。讀者只顯示一個(一組4列).even reader.NextResult()無法找到它.. – flute