Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从存储过程C发送输出参数并获取多个数据集#_C#_Sql Server_Stored Procedures_Sqlcommand_Executenonquery - Fatal编程技术网

C# 从存储过程C发送输出参数并获取多个数据集#

C# 从存储过程C发送输出参数并获取多个数据集#,c#,sql-server,stored-procedures,sqlcommand,executenonquery,C#,Sql Server,Stored Procedures,Sqlcommand,Executenonquery,我的存储过程:- 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,

我的存储过程:-

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
执行结果-

数据集1-

col1    col2    col3    col4    col5
数据集2-

@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);
字典存储=新建字典();
存储添加(“sd”,“2014-09-23 00:00:00.000”);
添加(“ed”,“2014-09-30 00:00:00.000”);
添加(“ID”、“40494”);
存储。添加(“Sp”,null);
存储。添加(“Ct”,空);
storage.Add(“GD”,空);
存储。添加(“总和”,空);
存储。添加(“总计”,空);
var spReturn=新数据(Data.DBKEY).ExecuteStredProcess(“mysamplesp”,存储);
。 .

public int executestredprocesse(字符串qryName,字典参数)
{
使用(SqlConnection con=newsqlconnection(_cont))
{
con.Open();
使用(SqlCommand cmd=newsqlcommand(qryName,con))
{
cmd.CommandType=CommandType.storedProcess;
foreach(参数中的var键。键)
{
cmd.Parameters.AddWithValue(key,Parameters[key]??DBNull.Value);
}
返回cmd.ExecuteNonQuery();
}
}
}
Q1:如何使用C#中的字典将输出参数发送到Sp?可能吗


问题2:如何从SP中获取多个数据集

对于Q1,您应该指定sql参数
方向
参数方向。输出

对于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

我添加了如下代码-
cmd.Parameters[“Sum”].Direction=ParameterDirection.Output;cmd.Parameters[“Total”].Direction=ParameterDirection.Output但获取
字符串[6]:Size属性的大小无效,为0。
在`var reader=cmd.ExecuteReader()上出错`尝试设置输出参数的
Size
属性,例如:
cmd.parameters[“Sum”].Size=5
。请参阅,但我无法从SP获取第二个数据集。读卡器仅显示一个数据集(一个数据集有4列)。即使是reader.NextResult()也找不到它。能否提供执行过程的完整代码?
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