c# - 表中最后一条记录的ID

标签 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();
        }
    }
}

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

最佳答案

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

您没有进行插入,只是进行SELECT

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

关于c# - 表中最后一条记录的ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21999620/

相关文章:

c# - 在代码中将 Rigidbody2D 主体类型设置为 "static"?

Java 存储过程因 OutOfMemoryError 而停止

php - 当我内爆异常(exception)页面时 Laravel 中间件错误

r - 将 R 连接到 MS Access 64 位 Windows

asp.net - DSN 测试正常,但尝试使用 DSN 登录 SQL Server 2005 时失败

php - 连接池不适用于适用于 Linux 的 SQL Server 的 ODBC 驱动程序 13

c# - 将 session 转换到对象

c# - CloudConfigurationManager.GetSetting 返回 null

c# - 使用 LINQ 合并 2 个数组

php - 具有多个标签的 PDO 搜索查询