2012-09-20 4 views
5

Wenn ich versuche, die letzte ID über SQL Server in die Datenbank einzufügen, wird __Page zurückgegeben. Hier ist mein Code:SCOPE_IDENTITY() funktioniert nicht

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

ist gerade Wert lesen, ohne zu 'int' Umwandlung zu sehen, was man bekommt tatsächlich von DB. –

Antwort

0

wir dies tun und funktioniert gut, aber wir verwenden Rückgabeparameter zum Beispiel in unserem Stored Procedure:

@RecordID int OUTPUT 

... hier die Insert-Anweisung

SET @RecordID= SCOPE_IDENTITY(); 

...

SELECT @RecordID 
1

Sie können eine gespeicherte Prozedur wie diese schreiben;

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 

und später können Sie es

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

Wenn nur Sie es wollen OUTPUTSELECT verwenden;

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

Wie mit ExecuteScalar. Und Ihre erste ausführende Anweisung lautet INSERT und gibt die Anzahl der eingefügten Datensätze zurück.

Um diese Verwendung SET NOCOUNT ON zu vermeiden, wie unten dargestellt:

string Query = @"SET NOCOUNT ON; 
INSERT INTO table1(name) values('ttt'); 
SELECT SCOPE_IDENTITY(); SET NOCOUNT OFF; 
"; 
Verwandte Themen