来自SSMS和ASP.NET中存储过程的不同输出

时间:2019-04-26 14:40:08

标签: asp.net sql-server vb.net

我创建了一个存储过程,以包括系统的新用户。参数是:名称,邮件和密码(全部为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]

1 个答案:

答案 0 :(得分:0)

发现了问题。该代码两次执行了存储过程:

cmd.ExecuteNonQuery()
adp.Fill(ds, spName)

因此,在第二次运行中,该记录已经存在,因为它是在第一次运行时创建的。我删除了其中的一行,现在可以了!