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); 

. . .

public int ExecuteSotredProcedure(string qryName, Dictionary<string, object> parameters) 
      { 
       using (SqlConnection con = new SqlConnection(_conStr)) 
       { 
        con.Open(); 
        using (SqlCommand cmd = new SqlCommand(qryName, con)) 
        { 
         cmd.CommandType = CommandType.StoredProcedure; 

         foreach (var key in parameters.Keys) 
         { 
          cmd.Parameters.AddWithValue(key, parameters[key] ?? DBNull.Value); 
         } 
         return cmd.ExecuteNonQuery(); 
        } 
       } 
      } 

Q1: Как отправить выходные паразиты в Sp с помощью словаря на C#? возможное ?

Q2: Как получить несколько наборов данных в результате SP?

ответ

2

Для Q1, следует указать параметр SQL direction для ParameterDirection.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 [ "Sum"] Направление = ParameterDirection. .Вывод; cmd.Parameters ["Total"]. Direction = ParameterDirection.Output; 'Но получение' String [6]: свойство Size имеет недопустимый размер 0.' Ошибка в 'var reader = cmd.ExecuteReader(); ' – flute

+1

Попробуйте установить свойство' Size' ваших выходных параметров, как: 'cmd.Parameters [" Sum "]. Размер = 5'. См. [Эту ссылку] (http://stackoverflow.com/questions/17494990/the-size-property-has-an-invalid-size-of-0) – MantasG

+0

Но я не могу получить 2-й набор данных из SP. Читатель показывает только один (один набор из 4 столбцов). Даже читатель.NextResult() не смог найти его. – flute