存储过程在 ExecuteReader 中究竟返回什么



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

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

现在在 C# 代码中,我打开一个 ExecuteReader,执行这个存储过程并开始读取,我实际上在读取什么?是执行的结果还是回报的结果?如果它来自可执行文件,执行程序不就是将变量总计设置为某个值吗?为什么我的代码中的 ExecuteReader 仍然正常读取行?

我对ExecuteReader使用存储过程的方式感到非常困惑。

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

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

除了查询返回的结果集之外,它不会挂接到任何内容。

有关更多信息:http://msdn.microsoft.com/en-us/library/haa3afyz(v=vs.110).aspx

当然

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

您不会读取任何内容,因为没有创建任何结果集。您只需赋值到一个变量中即可。

最新更新