忽略ORM/NHibernate等。考虑传递唯一ID并从单行返回数据(如果找到ID)的常见要求。执行此操作的两种方法是返回记录集或使用输出参数。存储过程将从.NET C#代码调用 - 因此从这个角度来看,需要使用ExecuteNonQuery设置/读取附加参数,而另一个需要ExecuteScalar和访问/读取DataReader。Stored Proc返回一行,记录集或输出参数?
是否有过使用一个VS其他任何实际的好处?
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
我想我应该补充的评论,我总是者优先记录方式,但只是因为这是我原来学的方式。我可以看到的这种方法的一个好处是它抽象了底层的数据类型/大小。如果名称在表内增加了大小,则需要在所有引用的地方修改输出参数。 – 2010-09-17 10:37:59