C# 从存储过程向.Net返回单个值更好的方法是:输出参数还是ExecuteScalar?

C# 从存储过程向.Net返回单个值更好的方法是:输出参数还是ExecuteScalar?,c#,.net,sql,sql-server,tsql,C#,.net,Sql,Sql Server,Tsql,我需要创建一个存储过程,它需要返回一些记录的计数。我正在使用.Net读取结果 我可以使用OUTPUT参数来返回值,也可以在存储过程中执行选择count(*)并使用读取 什么更好,为什么更好?毫无疑问-输出参数是最快最正确的方法查看这篇MSDN文章: 本文在GetOrderStatus的性能测试中显示,对于检索单个值,输出参数和ExecuteScaler之间的性能相同,但ExecuteScalar需要更少的代码 以下是关于不使用输出参数的其他一些有趣的想法: . 我喜欢在那篇文章中,输出参数打破了

我需要创建一个存储过程,它需要返回一些记录的计数。我正在使用.Net读取结果

我可以使用
OUTPUT
参数来返回值,也可以在存储过程中执行
选择count(*)
并使用读取


什么更好,为什么更好?

毫无疑问-输出参数是最快最正确的方法

查看这篇MSDN文章:

本文在
GetOrderStatus
的性能测试中显示,对于检索单个值,输出参数和ExecuteScaler之间的性能相同,但ExecuteScalar需要更少的代码

以下是关于不使用输出参数的其他一些有趣的想法:
. 我喜欢在那篇文章中,输出参数打破了函数的基本概念。

要添加一个想法-
ExecuteCalar
将返回状态代码,如果SP没有提及其他内容。保持这一点似乎是一个很好的做法。

或者您可以使用
RETURN
参数,正如您所问的:您需要创建一个存储过程,但您要问是否应该编写一个存储过程。你应该做你该做的事。@Oded好吧。。。答案实际上是
RETURN
不应用于错误信号以外的任何东西。我的观点是@gbn似乎在他的回答中也回答了这个问题。@Oded关于标量的陈述可能不正确()除此之外,这个问题还局限于
output
return
。您是否有一些文档来支持此语句?是的,ExecuteScalar创建TDS,这是一个相对较重的操作,比传回输出参数(它的“最快”一词)要重。建议将RETURN仅用于返回执行的错误状态(用于单词“rightest”)。如果你需要证据,我会找到的one@OlegDok-我听说,
输出
参数也更轻,但不确定在实践中实际有多少好处。查看TDS数据包的结构会很有趣。还有一件事-参数可以是强类型的-我认为这也是一个好处。@OlegDok-TDS只是与客户端通信的协议的名称。否则他们如何传递该值?我同意C#域,但SQL域有点不同,因为在许多情况下,我们希望优化传输方式并限制开销。性能测试链路+1。旧文章,但现在可能更相关。由于客户机、网络和服务器的规格要好得多,技术的选择可能并不重要。存储过程不是一个函数,尽管正如我在那里评论的那样(我也回答了),在需要在另一个t-SQL脚本中获得结果之前,使用标量是非常好的,但是这会变得有点麻烦,特别是如果您的SP也返回一个值。