Я сохранил процедуру, в которой первые update
имеет значения в таблице UserSignUp
, а затем insert
в таблице 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.
Кто-нибудь может вести меня, что если я буду неправильно с этим ?
У вашего SP есть проблемы с параллелизмом. –
Что касается вышеизложенного, вы можете заменить весь материал 'IF EXIST5' и просто сделать обновление в любом случае и использовать предложение' OUTPUT', чтобы вставить нужные значения в 'UserKeyPoints' напрямую. Затем проверьте «@@ ROWCOUNT», чтобы узнать, какое значение нужно вернуть. Таким образом, в основном хранимый процесс затем становится двумя операторами и устраняет проблему параллелизма. –
@MartinSmith Ok. Это было бы намного лучше. Благодарю. Позволяет R & D эту технику. – analyticalpicasso