2011-04-21 60 views
0

Sniplet:如何获得TableAdapter的正常运行插入,然后SELECT_LAST_ID()

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错误地/误解了它的工作原理。

在此先感谢您的任何答案。

回答

-1

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

为什么它没有在网站
在您的网站上的每个新的查询人可以使用一个新的连接工作。

last_insert_id()只返回当前连接的last_id。
由于QUERY1:insert ...使用从QUERY2不同的连接:select last_insert_id() QUERY2将始终返回1

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

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