忽略ORM / NHibernate等。考虑传递唯一ID并从单行返回数据的常见要求(如果找到ID)。执行此操作的两种方法是返回记录集或使用输出参数。存储过程将从.NET C#代码调用 - 所以从这个角度来看,需要使用ExecuteNonQuery设置/读取其他参数,而另一个需要ExecuteScalar和访问/读取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
答案 0 :(得分:3)
两种方法的主要区别在于灵活性。如果要更改返回的列,则更改返回记录集的过程的工作量会减少。
答案 1 :(得分:1)
我会返回单行并使用SqlDataReader来访问该信息。毕竟那一行可能会变成多行。
答案 2 :(得分:-2)
如果您只返回用户的ID,为了获取该用户信息,您的ORM需要再次往返数据库以获取有关该用户的其他信息。
我只是在您的实体和您的sql表之间设置正确的映射,并获取所有必需的字段,而不是返回ID。
但是假设我们有一个返回数百个ID的过程,如果你根据id对这些数据进行复杂的过滤,你肯定不想返回它的整个记录。所以,ymmv。