我有一个表,其中列是列及其数据类型
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'.
所以这样做的一个小技巧是将你的声明改为:
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)
| 归档时间: |
|
| 查看次数: |
615 次 |
| 最近记录: |