2012-09-20 10 views
5

Cuando intento obtener la última ID insertada en la base de datos a través de SQL Server, devuelve __Page. Aquí está mi código:SCOPE_IDENTITY() no funciona

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

Basta con leer valor devuelto sin convertir a 'int' para ver lo que realmente se obtiene de DB. –

Respuesta

0

hacemos esto y funciona bien, pero usamos los parámetros de retorno, por ejemplo, en nuestro procedimiento almacenado:

@RecordID int OUTPUT 

... aquí la instrucción de inserción

SET @RecordID= SCOPE_IDENTITY(); 

...

SELECT @RecordID 
1

Puede escribir un procedimiento almacenado como ese;

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 

y más tarde se puede tomar

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

Si solo desea utilizar SELECT que OUTPUT;

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

Como usando ExecuteScalar. Y nuestra primera declaración de ejecución es INSERT, por lo que devuelve el número de registros insertados.

Para evitar este uso SET NOCOUNT ON como se muestra a continuación:

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