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

发布于 2024-12-09 21:41:03 字数 702 浏览 1 评论 0原文

有一个 GetLastInsertId< /a> WebMatrix 中的方法。但是,使用 Reflector,我可以看到它是这样实现的:

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

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

我的问题是:

  1. WebMatrix 包装器是否做了一些事情,使其可以在我的情况下使用?
  2. 如果没有,是否有一种简单的方法可以使用 WebMatrix 类获取插入查询的插入 ID,或者我应该依靠 SqlClient 之类的东西来实现此目的?

我对 SQL Server(非紧凑)的答案感兴趣,如果这有什么不同的话。

There is a GetLastInsertId method in WebMatrix. However, using Reflector, I can see that it's implemented like this:

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

Which, as far as I can see, is a very bad way of doing it, because @@Identity returns the last insert considering every table and every session. I need this restricted to the scope and session I'm working with, so I was expecting this to use SELECT SCOPE_IDENTITY(), since that also seems to be what is most often used according to my reading.

My questions are:

  1. Do the WebMatrix wrappers do something that makes this ok to use in my case?
  2. If not, is there a simple way to get the inserted ID of an insert query using WebMatrix classes, or should I fall back on stuff like SqlClient for this?

I am interested in answers for SQL Server (not compact) if that makes a difference.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

橙味迷妹 2024-12-16 21:41:03

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

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

I had the same problem, and I read these answers but still couldn't get the code to work correctly. I possibly was misreading the solutions above, but what seemed to work for me was as follows:

  var db=Database.Open(...);
  var lastInsertID = db.QueryValue("INSERT name into Names; SELECT SCOPE_IDENTITY()");
赠我空喜 2024-12-16 21:41:03

引用 WebMatrix 数据 API 开发人员之一 David Fowler 的话:“[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()")

To quote David Fowler, one of the devs on the Data APIs in WebMatrix: "[SCOPE_IDENITTY] doesn't work on ce". Since we wanted a data API that would work on both CE and regular SQL Server, we used @@Identity. So if you want to use SCOPE_IDENTITY specifically, you should use db.QueryValue method:

var db = Database.Open(...);
db.Insert(...);
var lastInsertId = db.QueryValue("SELECT SCOPE_IDENTITY()")
倾`听者〃 2024-12-16 21:41:03

这是我的解决方案

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

here is my solution

var db.Database.open('..');
var lastId = db.GetLastInsertId(); 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文