我有一个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。
答案 0 :(得分:2)
last_insert_id()
仅适用于 INSERT 查询。最后一次插入由特定连接执行。它不会报告在其他连接中执行的插入操作,也不会报告您在10天前对您的帐户执行的插入操作。
你没有插入,只是SELECT
。
您需要使用SELECT MAX(id)
代替...并注意这是非常活泼的。如果您使用它来生成客户端ID,请不要。另一个并行客户端可以在你的背后俯冲并偷走你正在生成的ID,或者创建一个更新/更大的ID。