存储过程在ExecuteReader中返回的确切内容是什么?

时间:2014-02-26 22:39:20

标签: c# stored-procedures

如果我有这样的存储过程:

...
set @query = N'select @total = count(*) from (...)';
exec sp_executesql @query @total output;

return

现在在C#代码中我打开一个ExecuteReader,执行这个存储过程并开始阅读,我实际上在读什么?它是来自exec还是归来的结果?如果是来自exec,是不是exec只是将变量总数设置为某个值?为什么我的代码中的ExecuteReader仍然正常读取行?

我对ExecuteReader处理存储过程的方式感到困惑。

3 个答案:

答案 0 :(得分:0)

当然output是一个关键字,它告诉存储过程返回时输出变量应该是什么。

答案 1 :(得分:0)

您将不会读取任何内容,因为没有创建结果集。你只需要分配一个变量。

答案 2 :(得分:0)

ExecuteReader读取查询返回的任何结果集。如果您的查询中有三个SELECT,则ExecuteReader将允许您访问所有这三个结果集。您可以使用reader.NextResult()在集合之间移动。

如果您的查询包含对EXEC的调用,而EXEC又生成结果集(也许您使用EXEC调用的过程包含SELECT),则ExecuteReader将读取该结果集。

除了查询返回的结果集之外,它不会挂钩。

有关详情:http://msdn.microsoft.com/en-us/library/haa3afyz(v=vs.110).aspx