表中最后一条记录的ID

时间:2014-02-24 21:41:03

标签: c# mysql odbc

我有一个ODBC示例,它使用dsn DSN = RDBMSTest连接到MySQL数据库(我创建它以连接到我的数据库。

我正在尝试找到最后插入的ID,但我没有从表中获取最后一个ID。

这是我的代码:

using System;
using System.Data.Odbc;

namespace TestClient
{
    class Program
    {
        private static OdbcCommand command;
        static void Main(string[] args)
        {
            // test odbc connection and get last insert id
            string dsn = "DSN=RDBMSTest";
            using(OdbcConnection connection = new OdbcConnection(dsn))
            {
                connection.Open();
                OdbcTransaction transaction = null;
                command = new OdbcCommand();
                try
                {
                    transaction = connection.BeginTransaction();
                    command.Connection = connection;
                    command.Transaction = transaction;
                    command.CommandText = "SELECT * FROM test.new_table ORDER BY ID DESC";
                    command.ExecuteNonQuery();
                    command.CommandText = "SELECT last_insert_id()";
                    command.ExecuteNonQuery();
                    transaction.Commit();

                    OdbcDataReader reader = command.ExecuteReader();
                    while(reader.Read())
                    {
                        for(int i = 0; i < reader.FieldCount; i++)
                        {
                            Console.WriteLine(reader.GetName(i) + ": " + reader.GetValue(i));
                        }
                    }
                    reader.Close();
                    transaction.Dispose();
                    command.Dispose();
                }
                catch(Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }
            Console.Read();
        }
    }
}

根据我正在使用的表(test_table),我得到的ID为0,我的最后一个ID应该是186。

1 个答案:

答案 0 :(得分:2)

last_insert_id()仅适用于 INSERT 查询。最后一次插入由特定连接执行。它不会报告在其他连接中执行的插入操作,也不会报告您在10天前对您的帐户执行的插入操作。

你没有插入,只是SELECT

您需要使用SELECT MAX(id)代替...并注意这是非常活泼的。如果您使用它来生成客户端ID,请不要。另一个并行客户端可以在你的背后俯冲并偷走你正在生成的ID,或者创建一个更新/更大的ID。