2012-09-20 10 views
5

काम नहीं कर रहा है जब मैं SQL सर्वर के माध्यम से डेटाबेस पर डाली गई अंतिम आईडी प्राप्त करने का प्रयास करता हूं तो यह __Page देता है। यहाँ मेरी कोड है:SCOPE_IDENTITY()

query = "INSERT INTO 
      seekers(name, sname, lname, status, gender, dob, major, experince, 
        email, password, phone, valid, city) 
      values (@name, @sname, @lname, @status ,@gender, @dob, @major, 
        @exp, @email, @password, @phone, 0, @city); 
     SELECT SCOPE_IDENTITY();"; 

// some code here related to parameters 

command = new SqlCommand(query, connection); 
int id = Convert.ToInt32(command.ExecuteScalar()); 
+0

बस 'int' को बदलने क्या आप वास्तव में डीबी से मिलता है यह देखने के लिए बिना दिए गए मान पढ़ें। –

उत्तर

0

हम ऐसा और ठीक काम करता है लेकिन हम अपने संग्रहीत प्रक्रिया में उदाहरण के लिए वापसी पैरामीटर का उपयोग:

@RecordID int OUTPUT 

... यहाँ डालने बयान

SET @RecordID= SCOPE_IDENTITY(); 

...

SELECT @RecordID 
1

आप इस तरह की एक संग्रहीत प्रक्रिया लिख ​​सकते हैं;

CREATE PROCEDURE [seekers_Insert] 
@ID uniqueidentifier OUTPUT, 
@name nvarchar(50) , 
    @sname nvarchar(50), 

(other input parameters) 
    AS 
    INSERT INTO seekers(name,sname,lname,status,gender,dob,major,experince,email, 
         password,phone,valid,city) 
        values(@name,@sname,@lname,@status,@gender,@dob,@major,@exp,@email, 
         @password,@phone,0,@city) 

    SET @ID=SCOPE_IDENTITY() 
    GO 

और बाद में आप इसे

int ID = Convert.ToInt32(Command.ExecuteScalar()); 
4

ले बस आप इसे OUTPUT का उपयोग SELECT चाहते हैं कर सकते हैं;

INSERT INTO seekers(name,sname,lname,status,gender,dob,major,experince,email,password,phone,valid,city) 
OUTPUT INSERTED.IDENTITY_COL_NAME 
values(@name,@sname,@lname,@status,@gender,@dob,@major,@exp,@email,@password,@phone,0,@city); 
2

ExecuteScalar का उपयोग करने के रूप में। और आपका पहला निष्पादन कथन INSERT है, इसलिए यह रिकॉर्ड्स की संख्या लौटाता है।

जिन्हें आप नीचे इस प्रयोग SET NOCOUNT ON बचने के लिए:

string Query = @"SET NOCOUNT ON; 
INSERT INTO table1(name) values('ttt'); 
SELECT SCOPE_IDENTITY(); SET NOCOUNT OFF; 
"; 
संबंधित मुद्दे