Asp.net 使用SqlCommand.ExecuteNonQuery而不是…;

Asp.net 使用SqlCommand.ExecuteNonQuery而不是…;,asp.net,sql,ado.net,Asp.net,Sql,Ado.net,a) SqlCommand.ExecuteNonQuery用于更新、插入和删除操作。 除了使用ExecuteNonQuery而不是ExecuteReader这一事实之外,我们自动知道不会返回任何查询结果,是否还有其他一些好处/原因说明为什么应该使用ExecuteNonQuery b) 类似地,如果希望数据库操作返回单个值,则应使用ExecuteScalar而不是ExecuteNonquery,后者的结果将通过SqlParameter返回。我们为什么更喜欢ExecuteScalar而不是Execu

a)
SqlCommand.ExecuteNonQuery
用于更新、插入和删除操作。 除了使用
ExecuteNonQuery
而不是
ExecuteReader
这一事实之外,我们自动知道不会返回任何查询结果,是否还有其他一些好处/原因说明为什么应该使用
ExecuteNonQuery

b) 类似地,如果希望数据库操作返回单个值,则应使用
ExecuteScalar
而不是
ExecuteNonquery
,后者的结果将通过
SqlParameter
返回。我们为什么更喜欢
ExecuteScalar
而不是
ExecuteNonQuery

第二点是thanx

ExecuteScalar返回第一行的第一列:将整个数据集传递回客户端。即使数据集正好是一行和一列,返回数据集的效率仍然低于使用输出/返回参数

这同样适用于第1点:不处理记录集更有效。

对于第1点

你说过:

we automatically know there won’t be any query results returned

实际上,ExecuteOnQuery返回受影响的行数,如果执行查询后的逻辑取决于数据库是否已更改,则这一点非常重要。

A)“ExecuteScalar返回第一行的第一列:整个数据集被传递回客户端。即使数据集正好是一行和一列,返回数据集的效率仍然低于使用输出/返回参数。”因此,如果我使用ExecuteOnQuery而不是ExecuteScalar,并通过输出参数检索一个值会更好?B)顺便问一下–通过什么“通道”ExecuteOnQuery是否返回受影响的行数?我假设它不会将其作为返回值或输出参数返回?!a.是的。B.行数是另一个数据集。请参阅我的问题:答案中对其进行了调查ExecuteOnQuery返回受影响的行数,如果执行查询后的逻辑取决于数据库是否已更改,则这一点非常重要但是,为什么使用ExecuteReader而不是ExecuteOnQuery并让存储过程通过输出或返回参数返回受影响的行数效率较低呢你说的是几个字节。如果你关心这几个字节,那么我认为gbn的答案就足够了。但是如果你关心简单性,我认为使用ExecuteScalar返回单个值更简单。我不喜欢使用DataReader,除非我需要返回多个值;这是因为它需要额外的代码(例如:确保其已正确关闭)