2011-02-12 15 views
8

मैं एएसपी के साथ एक एसक्यूएल सर्वर संग्रहीत प्रक्रिया का उपयोग करने के कोशिश कर रहा हूँ:वापसी मान

ALTER PROCEDURE [dbo].[user_insert] 
    @firstName NVARCHAR(50) , 
    @lastName NVARCHAR(50) , 
    @cityid INT , 
    @email NVARCHAR(100) , 
    @password NVARCHAR(12) , 
    @Affiliate INT 
AS 
    BEGIN 
     DECLARE @index1 INT 
     SET @index1 = 0      
     IF (NOT EXISTS (SELECT * FROM  dbo.tbl_users 
          WHERE  user_email = @email) ) 
      BEGIN         
       INSERT INTO dbo.tbl_users 
         (user_first_name , 
          user_last_name , 
          city_id , 
          user_email , 
          user_password , 
          Affiliate_id 
         ) 
       VALUES (@firstName , 
          @lastName , 
          @cityid , 
          @email , 
          @password , 
          @Affiliate 
         ) 
       SET @index1 = (SELECT @@IDENTITY 
      END 
     RETURN @index1 
    END 

और एएसपी

Set oCmd = Server.CreateObject("ADODB.Command") 
oCmd.ActiveConnection = conn 
oCmd.CommandText = "user_insert" 
oCmd.CommandType = 4 

oCmd.Parameters.Append oCmd.CreateParameter("firstName", 203, 1, 100, "1") 
oCmd.Parameters.Append oCmd.CreateParameter("lastName", 203, 1, 100, "2") 
oCmd.Parameters.Append oCmd.CreateParameter("cityid", 3, 1, 2, 1) 
oCmd.Parameters.Append oCmd.CreateParameter("email", 200, 1, 100, txtmail) 
oCmd.Parameters.Append oCmd.CreateParameter("password", 203, 1, 12, "2") 
oCmd.Parameters.Append oCmd.CreateParameter("Affiliate", 3, 1, 3, 1) 
oCmd.Parameters.Append oCmd.CreateParameter("@index1", 3, 2) 
Set rs = oCmd.Execute 
response.write oCmd.Parameters("@index1").Value &"<br>" 
Set oCmd = Nothing 

है अगर मैं एसक्यूएल में सपा को चलाने सर्वर टर्मिनल यह काम कर रहा है, लेकिन जब मैं एएसपी कोड का उपयोग करता हूं, यदि यह "नया उपयोगकर्ता" है, तो मुझे "इंडेक्स 1"

लौटने का कोई मूल्य नहीं मिलता है। मैं क्या कर सकता हूं?

+0

शायद आपके पास पहले से ही उस ईमेल के साथ तालिका में उपयोगकर्ता है, इसके लिए जांच करें क्योंकि आपका एसपी वापस नहीं आता है/यह सच होने पर कुछ भी नहीं करता है –

+0

मैं एएसपी नहीं बोलता, लेकिन आम तौर पर मुझे लगता है कि आपको पैरामीटर बनाना होगा एक विशेष ध्वज जिसका अर्थ है 'यह एसपी रिटर्न वैल्यू पैरामीटर है'। नाम के बारे में निश्चित नहीं है, लेकिन जब मैं डेल्फी में एडीओ का उपयोग करता हूं, तो इसे हमेशा '@ RETURN_VALUE' नाम दिया जाता है। एएसपी पृष्ठभूमि वाले किसी को निश्चित रूप से उस सिर पर और मदद करनी चाहिए। –

उत्तर

8

अन्य उत्तर राज्यों के रूप में adParamReturnValue में बदलें।

पर सेट एनओसीटी का उपयोग करके आपको पहले परिणाम को दबाने की भी आवश्यकता है। इसके अलावा आपको @@ पहचान का उपयोग करना बंद कर देना चाहिए, इसके बजाय SCOPE_IDENTITY का उपयोग करना चाहिए।

ALTER PROCEDURE [dbo].[user_insert] 
    @firstName nvarchar(50), 
    @lastName nvarchar(50), 
    @cityid int, 
    @email nvarchar(100), 
    @password nvarchar(12), 
    @Affiliate int 
AS BEGIN 
    SET NOCOUNT ON 

    IF (not EXISTS (SELECT * FROM dbo.tbl_users WHERE [email protected])) 
    begin         
     INSERT INTO dbo.tbl_users(user_first_name, user_last_name, city_id, user_email, user_password, Affiliate_id)   
     VALUES(@firstName, @lastName, @cityid, @email, @password, @Affiliate) 

     --set 
     RETURN SCOPE_IDENTITY() 
    end 

    RETURN 0 
end 

नोट: तुम भी, अंत में रिटर्न 0 छोड़ सकते हैं के बाद से 0 डिफ़ॉल्ट वापसी परिणाम है।

2

आपका पैरामीटर दिशा adParamOutput (2) है, लेकिन होना चाहिए adParamReturnValue (4):

oCmd.Parameters.Append oCmd.CreateParameter("@index1", 3, 4) 

देखें ParamDirctionEnum कि CreateParameter लेता है।

+0

इसे आज़माएं। अभी भी शून्य – user186585

+0

@ user186585 लौट रहा है - पैरामीटर नाम से '@' ड्रॉप करने का प्रयास करें। – Oded

+0

ऐसा लगता है कि रिटर्न वैल्यू – user186585

संबंधित मुद्दे