【发布时间】:2010-10-19 11:24:40
【问题描述】:
可能是一个容易回答的问题。我有这个程序:
CREATE PROCEDURE [dbo].[AccountExists]
@UserName nvarchar(16)
AS
IF EXISTS (SELECT Id FROM Account WHERE UserName=@UserName)
SELECT 1
ELSE SELECT 0
当我有调用此过程并执行此操作的 ADO.NET 代码时:
return Convert.ToBoolean(sproc.ExecuteScalar());
返回真或假。
当我将存储过程更改为 RETURN 1 或 0 而不是 SELECT 时:
ALTER PROCEDURE [dbo].[AccountExists]
@UserName nvarchar(16)
AS
IF EXISTS (SELECT Id FROM Account WHERE UserName=@UserName)
RETURN 1
ELSE RETURN 0
sproc.ExecuteScalar() 返回 null。如果我改为尝试 sproc.ExecuteNonQuery(),则返回 -1。
如何在 ADO.NET 中获取带有 RETURN 的存储过程的结果?
我需要 AccountExists 来返回而不是 SELECT,这样我就可以让另一个存储过程调用它:
--another procedure to insert or update account
DECLARE @exists bit
EXEC @exists = [dbo].[AccountExists] @UserName
IF @exists=1
--update account
ELSE
--insert acocunt
【问题讨论】:
-
@Chris:主题应该被编辑得更具体。从这个主题来看,这个问题可能与 T-SQL 和 ADO.NET 有关。
-
大声笑,那是无意的。当我输入主题时,我的注意力一定被转移了。
标签: sql tsql stored-procedures ado.net