Asp.net 如何使用WebMatrix获取插入的行ID
WebMatrix中有一种方法。但是,使用Reflector,我可以看到它的实现方式如下:Asp.net 如何使用WebMatrix获取插入的行ID,asp.net,sql,sql-server,razor,webmatrix,Asp.net,Sql,Sql Server,Razor,Webmatrix,WebMatrix中有一种方法。但是,使用Reflector,我可以看到它的实现方式如下: [return: Dynamic] public object GetLastInsertId() { return this.QueryValue("SELECT @@Identity", new object[0]); } 据我所知,这是一种非常糟糕的方法,因为@@Identity返回考虑到每个表和每个会话的最后一次插入。我需要将它限制在我正在使用的范围和会话中,因此我希望它使用选择范围\u
[return: Dynamic]
public object GetLastInsertId()
{
return this.QueryValue("SELECT @@Identity", new object[0]);
}
据我所知,这是一种非常糟糕的方法,因为@@Identity
返回考虑到每个表和每个会话的最后一次插入。我需要将它限制在我正在使用的范围和会话中,因此我希望它使用选择范围\u IDENTITY()
,因为根据我的阅读,这似乎也是最常用的
我的问题是:
var db = Database.Open(...);
db.Insert(...);
var lastInsertId = db.QueryValue("SELECT SCOPE_IDENTITY()")
引用WebMatrix中数据API的一位开发人员的话:“[SCOPE\u idenity]在ce上不起作用”。因为我们需要一个既能在CE上工作又能在常规SQL Server上工作的数据API,所以我们使用了@Identity。因此,如果您想专门使用SCOPE_IDENTITY,应该使用db.QueryValue方法:
var db = Database.Open(...);
db.Insert(...);
var lastInsertId = db.QueryValue("SELECT SCOPE_IDENTITY()")
我也有同样的问题,我读了这些答案,但仍然无法让代码正常工作。我可能误读了上述解决方案,但似乎对我有效的方法如下:
var db=Database.Open(...);
var lastInsertID = db.QueryValue("INSERT name into Names; SELECT SCOPE_IDENTITY()");
我也有同样的问题,我读了这些答案,但仍然无法让代码正常工作。我可能误读了上述解决方案,但似乎对我有效的方法如下:
var db=Database.Open(...);
var lastInsertID = db.QueryValue("INSERT name into Names; SELECT SCOPE_IDENTITY()");
这是我的解决办法
var db.Database.open('..');
var lastId = db.GetLastInsertId();
这是我的解决办法
var db.Database.open('..');
var lastId = db.GetLastInsertId();
哦,那就有道理了。
SCOPE\u IDENTITY()
是否会按照您编写的方式正常工作?我有点困惑,因为我看到一些开发人员说应该在存储过程中使用它,尽管上面的MSDN页面没有使用存储过程。老实说,我不是100%确定,您可能需要进行测试。可能作用域标识必须与INSERT在同一批中,因此您可能需要将INSERT编写为:db.QueryValue(“INSERT…SELECT SCOPE\u IDENTITY()”,param1,param2,等等)。实际上,使用db.QuerySingle
和输出
:var db=Database.Open(“Test”);var val=“测试参数”;var t=db.QuerySingle(“插入测试(TestName)输出inserted.TestID作为'InsertedID'值(@0)”,val)代码>。然后@t.InsertedID
将给出插入的ID。请注意,TestID
是表Test
中的标识列。我不知道这在compact版中是否有效,但是对于compact@@Identity
,在大多数(如果不是全部)场景中使用似乎是安全的。谢谢你的帮助!对不起,我不得不投反对票。正如我所指出的,我正在使用它,在它应该工作的确切环境中,我没有得到返回的数据。对不起。@IVlad,你的评论才是有用的。谢谢你的发帖!我可以通过db.QueryValue()
获得它,但它的其余部分是相同的。这个答案应该能更好地编写可用的代码。与insert语句同时包含并执行此语句(SELECT SCOPE_IDENTITY()
部分)似乎很重要。没有它我什么都不能退。哦,那就有道理了。SCOPE\u IDENTITY()
是否会按照您编写的方式正常工作?我有点困惑,因为我看到一些开发人员说应该在存储过程中使用它,尽管上面的MSDN页面没有使用存储过程。老实说,我不是100%确定,您可能需要进行测试。可能作用域标识必须与INSERT在同一批中,因此您可能需要将INSERT编写为:db.QueryValue(“INSERT…SELECT SCOPE\u IDENTITY()”,param1,param2,等等)。实际上,使用db.QuerySingle
和输出
:var db=Database.Open(“Test”);var val=“测试参数”;var t=db.QuerySingle(“插入测试(TestName)输出inserted.TestID作为'InsertedID'值(@0)”,val)代码>。然后@t.InsertedID
将给出插入的ID。请注意,TestID
是表Test
中的标识列。我不知道这在compact版中是否有效,但是对于compact@@Identity
,在大多数(如果不是全部)场景中使用似乎是安全的。谢谢你的帮助!对不起,我不得不投反对票。正如我所指出的,我正在使用它,在它应该工作的确切环境中,我没有得到返回的数据。对不起。@IVlad,你的评论才是有用的。谢谢你的发帖!我可以通过db.QueryValue()
获得它,但它的其余部分是相同的。这个答案应该能更好地编写可用的代码。与insert语句同时包含并执行此语句(SELECT SCOPE_IDENTITY()
部分)似乎很重要。没有它,我无法让它归还任何东西。