私はストアド プロシージャを作成するのが初めてで、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 秒実行した後にのみ表示されます。時間。
ストアド プロシージャ コードで見落としているものがあるに違いないと考えています...どんな助けもいただければ幸いです。
ありがとう!