gpt4 book ai didi

c# - 使用 C# 中的输出参数和结果集读取 SP?

转载 作者:太空宇宙 更新时间:2023-11-03 17:36:57 25 4
gpt4 key购买 nike

我创建了一个类似于这个简化示例的存储过程:

CREATE PROCEDURE dbo.sp_MyStoredProcedure
@Var1 INT OUTPUT,
@Var2 DECIMAL(10,2) OUTPUT
AS
BEGIN
SET NOCOUNT ON;

SELECT
@Var1 = COUNT(*),
@Var2 = SUM(TranAmount)
FROM
MyTable

SELECT * FROM MyTable
END

当我在调用 SqlCommand 对象的 ExecuteReader() 方法后尝试从输出变量中读取值时,值为空。

string MyConnString = string.Empty;
SqlConnection MyConn = new SqlConnection(MyConnString);
SqlCommand MyCmd = new SqlCommand("sp_MyStoredProcedure", MyConn);
MyCmd.CommandType = CommandType.StoredProcedure;
MyCmd.Parameters.Add(new SqlParameter("@Var1", SqlDbType.Int));
MyCmd.Parameters.Add(new SqlParameter("@Var2", SqlDbType.Decimal);
MyCmd.Parameters[0].Direction = ParameterDirection.Output;
MyCmd.Parameters[1].Direction = ParameterDirection.Output;
SqlDataReader dr = MyCmd.ExecuteReader(CommandBehavior.CloseConnection);
int Var1 = Convert.ToInt32(MyCmd.Parameters[0].Value);
decimal Var1 = Convert.ToDecimal(MyCmd.Parameters[1].Value);

我做错了什么?

最佳答案

您需要读取阅读器直到结束,输出参数位于 TDS 流的末尾,客户端在结果集未被消费之前不会看到它们。

如果您必须在读取结果集之前获得计数和总和,则必须放弃 OUTPUT 参数。只需生成一个包含您感兴趣的两个值的普通结果集,然后购买 SELECT * 结果集。然后使用 SqlDataReader.NextResult() 在客户端读取两个结果集。

更新

这就是我所说的有两个结果集的意思:

CREATE PROCEDURE dbo.sp_MyStoredProcedure    
AS
BEGIN
SET NOCOUNT ON;
SELECT COUNT(*) as cnt, SUM(TranAmount) as sum_ta
FROM MyTable
SELECT * FROM MyTable
END

和客户:

string MyConnString = string.Empty;
SqlConnection MyConn = new SqlConnection(MyConnString);
SqlCommand MyCmd = new SqlCommand("sp_MyStoredProcedure", MyConn);
MyCmd.CommandType = CommandType.StoredProcedure;
using(SqlDataReader dr = MyCmd.ExecuteReader(CommandBehavior.CloseConnection))
{
while(dr.Read())
{
count = dr["cnt"];
sum = dr["sum_ta"];
}
dr.NextResult();
while(dr.Read())
{
// process MyTable row here
}
}

请注意,如果您的 C# 代码在使用数据读取器之前不需要输出参数的值,则您不需要执行此操作。您可以简单地读取 SqlDataReader 直到结束,然后检查输出参数,它们将被设置。

关于c# - 使用 C# 中的输出参数和结果集读取 SP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1364721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com