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 回答