如何获取最后插入行的id

Sil*_*ver 0 c# mysql

我有一个表,其中列是列及其数据类型

id=>AI,PK,int(11)
param_id=>varchar(45)
type=>varchar(45)
stationname=>varchar(45)
param=>varchar(45)
Run Code Online (Sandbox Code Playgroud)

现在当我在数据库中插入一行时:(数据库是MySQL,编程语言c#)

insert into param_reference (Param_Id,Type,StationName,Param) values ('Res','" + Type + "','" + damName + "','maxQ')"
Run Code Online (Sandbox Code Playgroud)

表中的行如下:

'1', 'Res', 'Reservoirs', 'B', 'maxQ'
Run Code Online (Sandbox Code Playgroud)

param_id必须像'Res1',其中1是自动生成的id.但是当我们插入这一行时,我们无法插入'Res1'coz id未知,我们只能在插入后才能获得.插入上面这行后我确实尝试了

select id from param_reference where Type='" + Type + "',StationName='" + damName + "',Param='maxQ',Param_id='Res'
Run Code Online (Sandbox Code Playgroud)

但它总是返回null,它不返回id.我怎么解决这个问题?如何在插入id后立即获取id.它也应该是插入的最后一个id,因为可以有很多行:

'1', 'Res', 'Reservoirs', 'B', 'maxQ'
'2', 'Res', 'Reservoirs', 'B', 'maxQ'
'3', 'Res', 'Reservoirs', 'B', 'maxQ'
'4', 'Res', 'Reservoirs', 'B', 'maxQ'
Run Code Online (Sandbox Code Playgroud)

但Res也将拥有id部分..

所以我真的想在插入第二行后立即将'Res'更新为'Res2'.

Mik*_*oud 5

所以这样做的一个小技巧是将你的声明改为:

INSERT INTO tbl (...) VALUES (...); SELECT LAST_INSERT_ID()
Run Code Online (Sandbox Code Playgroud)

然后插入ExecuteScalar将返回id的行; 然后,您可以相应地更新对象.因此整个代码段可能如下所示:

using (var conn = new MySqlConnection(connString))
using (var cmd = new MySqlCommand(sql, conn))
{
    var result = cmd.ExecuteScalar();
    int id;
    if (int.TryParse(result, out id))
    {
        // set the object's id here
    }
}
Run Code Online (Sandbox Code Playgroud)