我在这里看到的解决方案很少,但都没有效果。我试过SCOPE_IDENTITY()
没有wotk。 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的值。任何帮助赞赏
谢谢
答案 0 :(得分: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
答案 1 :(得分:0)
可能您没有按正确的顺序执行命令:(假设您使用的是SQL Server数据库)
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
来返回命令插入的行。之后,使用带有ExecuteScalar的SELECT SCOPE_IDENTITY()
命令文本运行一个新命令。当然,如果您无法修改SP,如果您可以更改proc,则th1rdey3的答案会更好,因为它可以避免数据库的运行。