1

我是编写存储过程的新手,我正在尝试创建一个用于确定数据库中是否存在贝宝交易 ID,如果不使用过程参数将客户添加到数据库,则返回新的客户的 ID 或 -1 表示之前已经处理过交易。

这是我的存储过程:

CREATE PROCEDURE [dbo].[addCustomerIfNotExist] @txn_id varchar(max), @fName nvarchar(255), @lastName nvarchar(255), @e_mail nvarchar(255), @password nvarchar(100), @customerId int OUTPUT
AS
    BEGIN
    -- if the transaction id has not already been processed
    if (select count(txn_id) from paypal_txns WHERE txn_id=@txn_id) = 0
        BEGIN
            --add txn id to the paypal_txns table
            INSERT INTO paypal_txns VALUES(@txn_id)
            --if the email address not is already in the database
            IF (select count(email) from customers where email = @e_mail) = 0
                BEGIN
                    --generate a new customer account 
                    INSERT INTO customers (pcCust_AgreeTerms,pcCust_Guest,pcCust_Residential,pcCust_AllowReviewEmails,name,lastname,email,password) VALUES(0,0,1,1,@fName,@lastName,@e_mail,@password)
                END
            --get the customer id 
            select @customerId = idcustomer from customers where email = @e_mail
        END
    ELSE
        BEGIN
            SET @customerId = -1
        END
    END
GO

我正在使用一个简单的 ASP 页面来测试这个过程的结果。这是我的 ASP 页面的大部分代码:

Set cmd = Server.CreateObject("ADODB.Command")
   Set cmd.ActiveConnection = paypalIpnDbCon
   cmd.CommandText = "addCustomerIfNotExist"
   cmd.CommandType = 4 'adCmdStoredProc

   cmd.Parameters.Append cmd.CreateParameter("txn_id", 200, 1,-1,"abcdefg") 

   cmd.Parameters.Append cmd.CreateParameter("fName", 202, 1,-1,"John") 

   cmd.Parameters.Append cmd.CreateParameter("lastName", 202, 1,-1,"Doe") 

   cmd.Parameters.Append cmd.CreateParameter("e_mail", 202, 1,-1,"johndoe@fake.com") 

   cmd.Parameters.Append cmd.CreateParameter("password", 202, 1,-1,randomPassword) 

   cmd.Parameters.Append cmd.CreateParameter("customerId", 3, 2) 

   Set rs = cmd.Execute

   custId = cmd.Parameters("customerId")
   response.write("<br>Customer ID = " & custId & "<br>")

当我在 paypal_txns 表中没有事务 ID (abcdefg) 的情况下运行 ASP 页面时,它将显示“客户 ID =”,就好像 ID 为空、null 或不存在一样。第二次运行 ASP 页面时,它显示“客户 ID = -1”,因为事务 ID 现在在表中。

我还尝试稍微调整一下代码,看看我是否可以取回有效的客户 ID,如果我改变逻辑,我可以得到一个不是 -1 的值,但它仍然只在我运行 ASP 一秒钟后才出现时间。

我在想我的存储过程代码中必须有一些我忽略的东西......任何帮助将不胜感激。

谢谢!

4

1 回答 1

0

如果您可以在记录集对象中使用,我并没有使用经典的 asp 进行太多工作,而是在输出参数中取值。

if (select count(txn_id) from paypal_txns WHERE txn_id=@txn_id) = 0
    BEGIN
        --add txn id to the paypal_txns table
        INSERT INTO paypal_txns VALUES(@txn_id)
        --if the email address not is already in the database
        IF (select count(email) from customers where email = @e_mail) = 0
            BEGIN
                --generate a new customer account 
                INSERT INTO customers (pcCust_AgreeTerms,pcCust_Guest,pcCust_Residential,pcCust_AllowReviewEmails,name,lastname,email,password) VALUES(0,0,1,1,@fName,@lastName,@e_mail,@password)
            END
        --get the customer id 
        select @customerId = idcustomer from customers where email = @e_mail
        select @customerId as custid
    END
ELSE
    BEGIN
        SET @customerId = -1
        select @customerId as custid
    END
END

您可以使用读取 custid

记录集.fields("custid")

希望这对您有所帮助。

于 2013-06-01T07:52:04.377 回答