运行SQL Server存储过程的Ado.net在使用ExecuteReader时无法检索输出值

时间:2015-06-14 16:32:29

标签: c# stored-procedures ado.net

param.Add(new SqlParameter("@Count", SqlDbType.Int) { Direction = ParameterDirection.Output });

using(var dataset = MsSqlHelper.ExecuteDataset(SqlConn.Conn, CommandType.StoredProcedure, "GetList", param.ToArray()))
{
    // Count.Value is not NULL
}

using (SqlDataReader dr = MsSqlHelper.ExecuteReader(SqlConn.Conn, CommandType.StoredProcedure, "GetList", param.ToArray()))
{
    // Count.Value is NULL    
}

我的存储过程中有一个输出值。

如果我使用ExecuteReader,则param Count的值为null。但是,如果我将方法ExecuteReader更改为ExecuteDataset,那么我可以获得Count的值。

为什么使用ExecuteReader时没有值?

顺便说一下,除ExecuteDataset / ExecuteReader之外,我的示例中没有任何变化。

1 个答案:

答案 0 :(得分:0)

您应该在阅读器关闭后(即在使用块之后)或在读取到数据末尾之后检查输出参数值。请参阅this KB article