我创建了一个存储过程,以包括系统的新用户。参数是:名称,邮件和密码(全部为varchar
)。存储过程首先检查邮件是否已在数据库中。如果不是,则将信息添加到表中。最后,输出是一个包含用户数据的表。
CREATE PROCEDURE [dbo].[user_new]
(@name VARCHAR(50),
@mail VARCHAR(50),
@password VARCHAR(100)
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @exist INT
SELECT @exist = COUNT([id])
FROM [dbo].[User]
WHERE [mail] = @mail
IF @exist = 0
INSERT INTO [dbo].[User] ([name], [mail], [password])
VALUES (@name, @mail, @password)
SELECT
@exist AS [exist], [id], [name], [mail]
FROM
[dbo].[User]
WHERE
[mail] = @mail
END
GO
当我在SSMS中执行存储过程时,一切正常:插入新邮件时,字段[exist]
返回0。插入邮件时,字段[exist]
返回1。到目前为止,一切都很好。
当我从.NET应用程序执行存储过程时(该应用程序有很多其他的调用都可以正常工作),就会发生错误:无论我尝试添加新邮件还是现有邮件,{{1} } 总是返回1。我试图多次更改逻辑,但是总是得到错误的结果。
这是.NET代码:
[exist]
答案 0 :(得分:0)
发现了问题。该代码两次执行了存储过程:
cmd.ExecuteNonQuery()
adp.Fill(ds, spName)
因此,在第二次运行中,该记录已经存在,因为它是在第一次运行时创建的。我删除了其中的一行,现在可以了!