C# 获取插入项的ID

C# 获取插入项的ID,c#,sql,sql-server,C#,Sql,Sql Server,因此,我有一个疑问: cmd.CommandText = @"INSERT INTO [dbo].[bill](bruto, waiterid, reversalid, number, ddate, tableid, total, printed, posplace, guestid, numberofguests, closedtime, methodofpaymentid, realdate) " + "VALUES (@bruto, @waiteri

因此,我有一个疑问:

cmd.CommandText = @"INSERT INTO [dbo].[bill](bruto, waiterid, reversalid, number, ddate, tableid, total, printed, posplace, guestid, numberofguests, closedtime, methodofpaymentid, realdate) " +
                    "VALUES (@bruto, @waiterid, 0, 0, @ddate, 1, @total, 'True', 0, 0, 0, @closedtime, @methodofpaymentid, @realtime) " +
                    "SELECT id";
//+ lines of cmd.Parameter.AddWithValue(...,...);
但一旦我尝试使用以下命令执行查询:

int newId = Convert.ToInt64(cmd.ExecuteScalar());
我发现这个id没有被识别(即使它确实存在)

如果我尝试将
选择
更改为
[dbo].[bill].id
,则会出现错误

无法绑定多部分标识符“dbo.bill.id”

我还试着让它
选择MAX(id)
(因为这是最接近标量的东西),但我还是得到了一个无法识别的错误

感谢阅读。

您可以使用

SELECT SCOPE_IDENTITY()
在insert查询之后,它将为您提供最后一个insert行的标识。有关详细信息,请查看MSDN

返回中插入到标识列中的最后一个标识值 同样的范围


insert语句可能包含插入的输出。条款

这可能是这样的:

INSERT .... OUTPUT INSERTED.ID

并使用执行标量调用执行。

请将所有
SELECT
语句发布到Q@tinka就是这样,我只需要ID,如果你是指我对该表的所有SELECT查询,那么将有超过100条语句。这基本上做到了。谢谢,拉胡尔!当我能够(~9分钟)的时候,我会接受答案。事实上,我确实尝试过,但不幸的是没有成功。我忘了提到它。这听起来很奇怪,因为我这样做了好几次。从我从其他StackOverflow问题中读到的内容来看,它确实对某些人有用,是的,但它看起来取决于您使用的SQL Server的版本。似乎最早是在SQL Server 2008中发现的