2012-09-20 6 views
5

SQL Server経由でデータベースに挿入された最後のIDを取得しようとすると、__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

をちょうどあなたが実際にDBから取得するかを確認するint' 'に変換せずに返された値を読み:以下に示すように、この使用SET NOCOUNT ONを回避するために

。 –

答えて

0

我々はこれを行うと、正常に動作しますが、我々は我々のストアドプロシージャでは、たとえば、リターン・パラメータを使用します。

@RecordID int OUTPUT 

...ここに挿入文

SET @RecordID= SCOPE_IDENTITY(); 

...

SELECT @RecordID 
1

あなたはそのようなストアドプロシージャを書くことができます。ちょうどあなたがそれをOUTPUTを使用SELECTしたい場合は

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

をそれを取ることができます。

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ですので、挿入されたレコードの数を返します。

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