C# 获取中最后一个插入行的id

C# 获取中最后一个插入行的id,c#,sql-server,stored-procedures,C#,Sql Server,Stored Procedures,我在这里看到的解决方案很少,但没有一个有效。我尝试了SCOPE\u IDENTITY()但没有成功。id是自动递增的 这是我的存储过程 CREATE PROCEDURE [dbo].[uploadVid] @video varbinary(MAx), @vidTitle varchar(50), @vidCategory varchar(50), @vidDate date, @vidDescription varchar(Max), @vidNa

我在这里看到的解决方案很少,但没有一个有效。我尝试了
SCOPE\u 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();
&

我放了一个断点,它给了我一个null或0的值。谢谢你的帮助

谢谢你试试这个

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
试试这个

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
试试这个

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
试试这个

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

可能您没有按正确的顺序执行命令:(假设您使用的是SQL Server DB)


ExecuteScalar
仅返回所执行查询第一列中第一行的值。在插入的情况下,该值没有意义。您需要一个
ExecuteNonQuery
,它返回命令插入的行。之后,使用ExecuteScalar运行一个新命令,并选择SCOPE_IDENTITY()命令文本。当然,如果您无法修改SP,那么如果您可以更改proc,则th1rdey3的答案会更好,因为它可以避免数据库的运行行程

可能您没有按照正确的顺序执行命令:(假设您使用的是SQL Server DB)


ExecuteScalar
仅返回所执行查询第一列中第一行的值。在插入的情况下,该值没有意义。您需要一个
ExecuteNonQuery
,它返回命令插入的行。之后,使用ExecuteScalar运行一个新命令,并选择SCOPE_IDENTITY()命令文本。当然,如果您无法修改SP,那么如果您可以更改proc,则th1rdey3的答案会更好,因为它可以避免数据库的运行行程

可能您没有按照正确的顺序执行命令:(假设您使用的是SQL Server DB)


ExecuteScalar
仅返回所执行查询第一列中第一行的值。在插入的情况下,该值没有意义。您需要一个
ExecuteNonQuery
,它返回命令插入的行。之后,使用ExecuteScalar运行一个新命令,并选择SCOPE_IDENTITY()命令文本。当然,如果您无法修改SP,那么如果您可以更改proc,则th1rdey3的答案会更好,因为它可以避免数据库的运行行程

可能您没有按照正确的顺序执行命令:(假设您使用的是SQL Server DB)



ExecuteScalar
仅返回所执行查询第一列中第一行的值。在插入的情况下,该值没有意义。您需要一个
ExecuteNonQuery
,它返回命令插入的行。之后,使用ExecuteScalar运行一个新命令,并选择SCOPE_IDENTITY()命令文本。当然,如果您无法修改SP,那么如果您可以更改proc,则th1rdey3的答案会更好,因为它可以避免数据库的运行行程

您使用什么数据库?考虑使用<代码>输出参数< /代码>以返回新的ID,因为返回值用于错误处理:来自ADO.NET示例的存储过程调用:使用什么数据库?考虑使用<代码>输出参数< /代码>以获取新的ID,返回值用于错误处理:来自ADO.NET示例的存储过程调用:使用什么数据库?考虑使用<代码>输出参数< /代码>以获取新的ID,返回值用于错误处理:来自ADO.NET示例的存储过程调用:使用什么数据库?考虑使用<代码>输出参数< /代码>以返回新的ID,因为返回值用于错误处理:来自ADO.NET示例的存储过程调用:不需要执行另一个Sql命令,从存储过程返回SCOPE_IDENTITY()应该可以做到这一点。请参阅第三方的答案。@DudePascalu我的答案是否给出了错误的结果?你知道他是否可以更换SP吗?虽然另一个答案可能更好,但我认为我的答案不值得投反对票。那是你的选择。他没有告诉我们他是否可以修改SP。如果他不能,你是对的,这是一种方法。我很抱歉投了反对票。但如果他可以,则不建议使用这种方式,因为您只能在一个命令中返回id。无需执行另一个SqlCommand,从存储过程返回SCOPE_IDENTITY()就可以了。请参阅第三方的答案。@DudePascalu我的答案是否给出了错误的结果?你知道他是否可以更换SP吗?虽然另一个答案可能更好,但我认为我的答案不值得投反对票。那是你的选择。他没有告诉我们他是否可以修改SP。如果他不能,你是对的,这是一种方法。我很抱歉投了反对票。但如果他可以,则不建议使用这种方式,因为您只能在一个命令中返回id。无需执行另一个SqlCommand,从存储过程返回SCOPE_IDENTITY()就可以了。请参阅第三方的答案。@DudePascalu我的答案是否给出了错误的结果?你知道他是否可以更换SP吗?虽然另一个答案可能更好,但我认为我的答案不值得投反对票。那是你的选择。他没有告诉我们他是否可以修改SP。如果他不能,你是对的,这是一种方法。我很抱歉投了反对票。但如果他可以,则不建议使用这种方式,因为您只能在一个命令中返回id。无需执行另一个SqlCommand,从存储过程返回SCOPE_IDENTITY()就可以了。请参阅第三方的答案。@DudePascalu我的答案是否给出了错误的结果?你知道他是否可以更换SP吗?虽然另一个答案可能更好,但我认为我的答案不值得投反对票。那是你的选择。他没有告诉我们他是否可以修改SP。如果他不能,你是对的,这是一种方法。我很抱歉投了反对票。但如果他可以,则不建议使用这种方式,因为您只能在一个命令中返回id。