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