5

SQL Server 経由でデータベースに挿入された最後の ID を取得しようとすると、__Page が返されます。これが私のコードです:

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());
4

4 に答える 4

4

SELECT使いたいだけなら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);
于 2012-09-20T09:08:56.323 に答える
2

使用するようExecuteScalarに。そして、最初に実行するステートメントはINSERT、挿入されたレコードの数を返すためです。

この使用を回避するにはSET NOCOUNT ON、次のようにします。

string Query = @"SET NOCOUNT ON;
INSERT INTO table1(name) values('ttt');
SELECT SCOPE_IDENTITY(); SET NOCOUNT OFF;
";
于 2012-09-20T10:13:47.830 に答える
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());
于 2012-09-20T09:06:53.120 に答える
0

これを実行して正常に動作しますが、たとえばストアド プロシージャで戻りパラメーターを使用します。

@RecordID int OUTPUT

... ここに挿入ステートメント

SET @RecordID= SCOPE_IDENTITY();

...

SELECT @RecordID
于 2012-09-20T09:05:18.400 に答える