我有一个存储过程,首先在UserSignUp
表中更新值,然后在UserKeyPoints
表中插入值,但我的存储过程没有执行。
这是我的存储过程:
CREATE PROC [dbo].[proc_getActivationCode] @ActivationCode VARCHAR(1000)=''
AS
BEGIN
IF EXISTS(SELECT ActivationCode
FROM UserSignUp
WHERE ActivationCode = @ActivationCode
AND Activate = 'False')
BEGIN
DECLARE @UserId INT
SET @userid= (SELECT AutoID
FROM UserSignUp
WHERE ActivationCode = @ActivationCode)
UPDATE UserSignUp
SET Activate = 'Confirm Code'
WHERE ActivationCode = @ActivationCode
INSERT INTO UserKeyPoints
(KeyPoints,
UserId)
VALUES (500,
@userid)
SELECT 1
END
ELSE
BEGIN
SELECT 2
END
END
这是我执行存储过程的C#代码。
if (Request.QueryString["token"] != null)
{
Label1.Text = Request.QueryString["token"];
con.Open();
SqlCommand cmd = new SqlCommand("proc_getActivationCode1", con);
cmd.Parameters.AddWithValue("@ActivationCode", Request.QueryString["token"].ToString());
SqlDataReader dr = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dr);
dr.Close();
con.Close();
if (dt.Rows[0][0].ToString() == "1")
{
//Label1.Text = "You are confirmed successfully. Please Click here for Login: ";
SendEmail objMail = new SendEmail();
}
else
{
Label1.Text = "You are already confirmed.";
}
}
当我执行这段代码时,它会在没有
insert
和update
的情况下运行该过程,在我的.aspx
页面上,我得到了Label1
的输出,即You are already confirmed.
有人能指导我出了什么问题吗?
IF EXIST5
部分,直接执行更新操作,并使用OUTPUT
子句将所需值直接插入到UserKeyPoints
中。然后检查@@ROWCOUNT
以了解要返回的值。因此,存储过程基本上变成了两个语句,并解决了并发问题。 - Martin Smith