如何让 TableAdapter 正确运行插入,然后运行 ​​SELECT_LAST_ID()

发布于 2024-11-02 18:13:43 字数 664 浏览 1 评论 0原文

代码片段:

    int resNo = -1;
    MoviesTableAdapters.reservationTableAdapter resAdapter = new MoviesTableAdapters.reservationTableAdapter();
    if (Int32.TryParse(info[1], out phoneNo))
    {
    resNo = resAdapter.InsertQuery(phoneNo, info[0]);
    }

运行这个我不断得到 1 作为返回,即使我的 LAST_INSERT_ID() 有所不同。

我的查询是这样的

INSERT INTO `reservation` (`phone_no`, `password`) VALUES (@phone_no, @password);
SELECT LAST_INSERT_ID() FROM reservation;

这里明显的结论是整数的返回不起作用,但无论我将 resNo 初始化为什么,我仍然得到 1 - 当我在我的网站中运行它时,当我直接针对MySQL 数据库我得到了正确的ID。

这使我得出结论,要么是我错误地/误解了 TableAdapter 的工作原理。

预先感谢您的任何答复。

Sniplet:

    int resNo = -1;
    MoviesTableAdapters.reservationTableAdapter resAdapter = new MoviesTableAdapters.reservationTableAdapter();
    if (Int32.TryParse(info[1], out phoneNo))
    {
    resNo = resAdapter.InsertQuery(phoneNo, info[0]);
    }

Running this I keep getting 1 as a return, even though my LAST_INSERT_ID() is something different.

My query is like this

INSERT INTO `reservation` (`phone_no`, `password`) VALUES (@phone_no, @password);
SELECT LAST_INSERT_ID() FROM reservation;

The obvious conclusion here is that the return of the integer didn't work, but no matter what I initialize resNo to, I still get 1 - when I run it in my website, when I run it directly against the MySQL database I get the correct ID.

This has lead me to the conclusion, that it is either me who're using the TableAdapter wrong/misunderstood how it works.

Thanks in advance for any answers.

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

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

发布评论

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

评论(1

南烟 2024-11-09 18:13:43

我认为这并不是 100% 确定。

为什么在网站上不起作用
在您的网站中,每个新查询都会使用一个新连接。

last_insert_id() 仅返回当前连接的last_id。
由于 query1: insert ... 使用与 query2: select last_insert_id() 不同的连接,query2 将始终返回 1。

为什么它在数据库中工作正常
直接针对数据库运行,数据库足够聪明,可以保持同一个连接打开,并且 query1 和 query2 在同一个连接中运行。

该怎么办
您需要研究如何强制您的 C# 代码使用持久连接。

Here's what I think not 100% sure.

Why does it not work in the website
In your website each new query gets to use a new connection.

last_insert_id() only returns the last_id of the current connection.
Since query1: insert ... uses a different connection from query2: select last_insert_id() query2 will always return 1.

And why does it work ok in the database
Running directly against the database, the database is clever enough to keep the same connection open and query1 and query2 run in the same connection.

What to do about it
You need to research how to force your c# code to use persistent connections.

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