0

ここでいくつかの解決策を見ましたが、どれもうまくいきませんでした。私SCOPE_IDENTITY()は気づかなかった。ID は自動インクリメントです。

これは私のストアドプロシージャです

CREATE PROCEDURE [dbo].[uploadVid]
    @video varbinary(MAx),
    @vidTitle varchar(50),
    @vidCategory varchar(50),
    @vidDate date,
    @vidDescription varchar(Max),
    @vidName varchar(50),
    @vidSize bigint
AS

INSERT INTO Video(video, vidTitle, vidCategory, vidDate, vidDescription, vidName, vidSize)
VALUES (@video, @vidTitle, @vidCategory, @vidDate, @vidDescription, @vidName, @vidSize)

&バックエンドで試しました

Object i = register.ExecuteScalar();

&

int newId = (Int32)register.ExecuteScalar();

ブレークポイントを設定すると、null または 0 の値が返されました。

ありがとう

4

2 に答える 2

3

これを試して

CREATE PROCEDURE [dbo].[uploadVid]
    @video varbinary(MAx),
    @vidTitle varchar(50),
    @vidCategory varchar(50),
    @vidDate date,
    @vidDescription varchar(Max),
    @vidName varchar(50),
    @vidSize bigint
AS
begin

declare @id as int --assuming your identity column is int

INSERT INTO Video(video, vidTitle, vidCategory, vidDate, vidDescription, vidName, vidSize)
VALUES (@video, @vidTitle, @vidCategory, @vidDate, @vidDescription, @vidName, @vidSize)

set @id = scope_identity()
select @id --return the value for executescaler to catch it
end
于 2013-10-09T18:24:27.690 に答える
0

おそらく、コマンドを正しい順序で実行していない可能性があります: (SQL Server DB を使用している場合)

SqlCommand cmd = new SqlCommand("uploadVid", connnection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(.....)
......
// After adding the parameters you execute the command to insert the new row....
int rowsInserted = cmd.ExecuteNonQuery();
if(rowsInserted > 0)
{

    SqlCommand cmd1 = new SqlCommand("SELECT SCOPE_IDENTITY()", connection);
    int newID = (int)cmd1.ExecuteScalar();
}

ExecuteScalar実行されたクエリの最初の列の最初の行の値のみを返します。挿入の場合、この値は無意味です。ExecuteNonQueryコマンドによって挿入された行を返すが必要です。その後SELECT SCOPE_IDENTITY()、ExecuteScalar を使用してコマンド テキストで新しいコマンドを実行します。これはもちろん、SP を変更できない場合、データベースへの実行トリップを回避できるため、proc を変更できれば th1rdey3 からの回答の方が適切です。

于 2013-10-09T18:24:38.413 に答える