This question already has answers here:
Returning last inserted id from MySql
                                
                                    (2个答案)
                                
                        
                        
                            MySql Last Insert ID, Connector .net
                                
                                    (5个答案)
                                
                        
                                5年前关闭。
            
                    
我有一张桌子,下面是各列及其数据类型

id=>AI,PK,int(11)
param_id=>varchar(45)
type=>varchar(45)
stationname=>varchar(45)
param=>varchar(45)


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

insert into param_reference (Param_Id,Type,StationName,Param) values ('Res','" + Type + "','" + damName + "','maxQ')"


表中的行类似于:

'1', 'Res', 'Reservoirs', 'B', 'maxQ'


param_id必须类似于“ Res1”,其中1是自动生成的ID。
但是,当我们插入此行时,我们无法插入“ Res1”,因为未知,并且只有在插入后才能获得。
我在插入上面这一行后就尝试了

select id from param_reference where Type='" + Type + "',StationName='" + damName + "',Param='maxQ',Param_id='Res'


但它始终返回null,不返回ID。
我该如何解决?
插入后如何获取ID。
也应该是最后插入的ID,因为可能有很多行,例如:

'1', 'Res', 'Reservoirs', 'B', 'maxQ'
'2', 'Res', 'Reservoirs', 'B', 'maxQ'
'3', 'Res', 'Reservoirs', 'B', 'maxQ'
'4', 'Res', 'Reservoirs', 'B', 'maxQ'


但是Res也将拥有id部分。

所以我实际上想在插入第二行后立即将“ Res”更新为“ Res2”。

最佳答案

因此,执行此操作的一个小技巧是将您的声明更改为:

INSERT INTO tbl (...) VALUES (...); SELECT LAST_INSERT_ID()


然后插入带有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
    }
}

关于c# - 如何获取最后插入的行的ID ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23737963/

10-11 02:12
查看更多