这是我当前的存储过程实现,它返回给定订单ID的订单状态。有两种情况,
我的困惑是,如何在一个存储过程中优雅/高效地实现这两个功能,以便我返回情况1的匹配订单ID,并指出客户在情况2中没有匹配的订单ID?
我使用VSTS 2008 + C#+ ADO.Net + .Net 3.5作为客户端,并使用SQL Server 2008作为服务器。
CREATE PROCEDURE [dbo].[GetStatus]
@ID [nvarchar](256),
@Status [int] output
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT @Status = [Status]
FROM [dbo].[OrderStatus]
WHERE (@ID = [ID]);
END
提前谢谢,
乔治
答案 0 :(得分:3)
为什么使用输出参数。
您只需要将存储过程结果存入数据访问层的数据集中。 只需检查 if(dataset!= null)然后取值,否则将相应的消息返回到您的业务层。
答案 1 :(得分:2)
您可以采取多种方法:
按原样和.NET代码保存所有内容,如果返回的@status值为DBNull,则表示情况2,否则情况为1。
将一个RETURN语句添加到SPROC并使用
Dim returnValue As New SqlParameter(“@ RETURN_VALUE”,SqlDbType.Int)
returnValue.Direction = ParameterDirection.ReturnValue
Cmd.Parameters.Add(的returnValue)
在.NET代码中明确标识SPROC返回的内容并采取相应的操作。
作为附加提示,在SPROC中将值赋给@Status变量时,请使用SET而不是SELECT。如果找不到匹配项,这将保证您返回NULL。所以,
` - 在此处插入程序声明
SET @Status = SELECT [Status]
FROM [dbo].[OrderStatus]
WHERE (@ID = [ID]);`
答案 2 :(得分:1)