如何使用WebMatrix获取插入的行ID

时间:2011-10-13 10:55:30

标签: asp.net sql sql-server razor webmatrix

WebMatrix中有一个GetLastInsertId方法。但是,使用Reflector,我可以看到它的实现方式如下:

[return: Dynamic]
public object GetLastInsertId()
{
    return this.QueryValue("SELECT @@Identity", new object[0]);
}

据我所知,这是一种非常糟糕的方法,因为@@Identity会考虑每个表和每个会话返回最后一个插入。我需要将此限制在我正在使用的范围和会话中,因此我希望使用SELECT SCOPE_IDENTITY(),因为根据我的阅读,这似乎也是最常用的。

我的问题是:

  1. WebMatrix包装器是否做了一些可以在我的情况下使用的东西?
  2. 如果没有,是否有一种简单的方法可以使用WebMatrix类获取插入查询的插入ID,还是应该依靠SqlClient这样的东西?
  3. 我对SQL Server(非紧凑型)的答案感兴趣,如果这有所不同。

3 个答案:

答案 0 :(得分:1)

引用David Fowler,WebMatrix中数据API的一个开发人员:“[SCOPE_IDENITTY]在ce上不起作用”。由于我们需要一个可以在CE和常规SQL Server上运行的数据API,因此我们使用了@@ Identity。因此,如果您想特别使用SCOPE_IDENTITY,则应使用db.QueryValue方法:

var db = Database.Open(...);
db.Insert(...);
var lastInsertId = db.QueryValue("SELECT SCOPE_IDENTITY()")

答案 1 :(得分:1)

我遇到了同样的问题,我读了这些答案,但仍无法使代码正常工作。我可能误读了上面的解决方案,但似乎对我有用的是:

  var db=Database.Open(...);
  var lastInsertID = db.QueryValue("INSERT name into Names; SELECT SCOPE_IDENTITY()");

答案 2 :(得分:1)

这是我的解决方案

var db.Database.open('..');
var lastId = db.GetLastInsertId();