MySQL LAST_INSERT_ID()问题

时间:2011-03-16 22:22:42

标签: c# mysql odbc

我遇到LAST_INSERT_ID()的问题。

每次我使用它时,我都需要打开和关闭新连接。 这大大减慢了我的应用程序。 我需要做很多插入语句,最后得到每个插入的id 一切都在同一个连接上! 如何在同一连接上获取最后插入的ID 用于来自特定表的MySQl,ODBC和C#而没有并发问题?

这是我的代码:

#region Private Variables
private static DataAccess _DataAccess = null;
private static object _SyncLock = new object();
private OdbcConnection myConnection = null;
#endregion

#region Instance Method
public static DataAccess Instance
{
    get
    {
        lock (_SyncLock)
        {
            if (_DataAccess == null)
                _DataAccess = new DataAccess();
            return _DataAccess;
        }
    }
}
#endregion

#region Constractors
public DataAccess()
{
    myConnection = new OdbcConnection(stringConnDB);
    myConnection.Open();
}
#endregion

2 个答案:

答案 0 :(得分:4)

  

每次我使用它时,我都需要打开和关闭新连接

不,您不需要新连接。您应该在插入语句之后在同一连接上使用它。

来自manual

  

生成的ID在每个连接的服务器中维护。这意味着[LAST_INSERT_ID]返回给定客户端的值是由客户端影响AUTO_INCREMENT列的最新语句生成的第一个AUTO_INCREMENT值。此值不受其他客户端的影响,即使它们生成自己的AUTO_INCREMENT值。此行为可确保每个客户端都可以检索自己的ID,而无需关心其他客户端的活动,也无需锁定或事务。

答案 1 :(得分:3)

为什么您认为需要打开新连接?实际上你应该打开一个新的连接,你应该在同一个连接上使用last_insert_id(),以确保得到正确的结果。

如果您尝试使用新连接并且它似乎有效,那么这只是因为连接被合并,并且您碰巧第二次获得相同的连接。当您开始与多个单个用户一起使用时,它将失败。