忽略ORM / NHibernate等.考虑传递唯一ID并从单行返回数据的常见要求(如果找到ID).执行此操作的两种方法是返回记录集或使用输出参数.存储过程将从.NET C#代码调用 – 因此从这个角度来看,需要使用ExecuteNonQuery设置/读取其他参数,而另一个需要Execute
Scalar和访问/读取DataReader.
使用一个与另一个相比是否有任何实际好处?
CREATE PROC GetUserByRecordSet
@UserID UniqueIdentifier
AS
BEGIN
SELECT
ID,
Name,
EmailAddress
FROM
[User]
WHERE
id = @UserID
END
GO
CREATE PROC GetUserByOutputParams
@UserID UniqueIdentifier,
@Name NVARCHAR(255) OUTPUT,
@EmailAddress NVARCHAR(500) OUTPUT
AS
BEGIN
SELECT
@Name =Name,
@EmailAddress = EmailAddress
FROM
[User]
WHERE
id = @UserID
END
GO
最佳答案 这两种方法的主要区别在于灵活性.如果要更改返回的列,则更改返回记录集的过程的工作量会减少.