1

私はストアド プロシージャを作成するのが初めてで、paypal トランザクション 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 が空、null、または存在しないかのように "Customer ID = " と表示されます。ASP ページを 2 回目に実行すると、「Customer ID = -1」と表示されます。これは、トランザクション ID がテーブルにあるためです。

また、コードを少し調整して、有効な顧客 ID を取得できるかどうかを確認しました。ロジックを変更すると、-1 以外の値を取得できますが、ASP を 1 秒実行した後にのみ表示されます。時間。

ストアド プロシージャ コードで見落としているものがあるに違いないと考えています...どんな助けもいただければ幸いです。

ありがとう!

4

1 に答える 1