20 个解决方案
#1
再做一次查询"select top 1 [ID] from table order by [ID] desc"
#2
或者select @@IDENTITY from table
#3
·这个方法我早想到了,我的意思是在插入数据时返回ID,就像可以SQL里可以设置存储过程返回值一样。
#4
Access是不支持Batch Command和存储过程的,只能两次访问
#5
·要是实在没有办法的话,我只能改变我的数据操作结构了,原以为是用SQL呢!唉~
#6
将表的id列设为自动递增,添加数据后,select此表的max(id)就可以了
#7
·谢谢你的关注。
#8
insert tablename values('','') select @@IDENTITY
这样写就可以返回你要的值啊
insert 本来是返回影响的行数,不过后面就selec就会返回你要的最大值了
传sql语句的时候其实是可以一次传多条的
分两次传浪费资源没什么意义
这样写就可以返回你要的值啊
insert 本来是返回影响的行数,不过后面就selec就会返回你要的最大值了
传sql语句的时候其实是可以一次传多条的
分两次传浪费资源没什么意义
#9
string strCmd = "insert into Date(字段名1,字段名2) values('value','value') select max(id)"
---
int id = OleDbCommand(OleCon, strCmd)
------
·是不是这样写,id就可以返回当前插入数据的Id了?
---
int id = OleDbCommand(OleCon, strCmd)
------
·是不是这样写,id就可以返回当前插入数据的Id了?
#10
mark
#11
·mark,什么意思?装酷
#12
请问select max(id)会不会有并发问题
#13
估计会拿到亚值
#14
关注一下~
#15
·向大家求助
#16
好像只能max()了
#17
#18
你奶奶的,又是倒分贴
#19
我一般是用查表法:
创建一个表存存储所有表的最大 id,当要向一个表中插入一条记录时:
private static readonly Object Locker = new Object();
public static int GetCurrentID(string TableName){
lock(Locker){
int newid = 找到这个表当前ID
使这个表的最大ID加1
return newid;
}
}
这样,在插入之前就知道了新记录的ID值。不足之处是这种做法使每次插入数据时都要至少三次访问数据库。不过,我觉得这种消耗还不至于影响性能,因为一个数据库系统中表的数量应该不会太多,特别是 access 这样的数据库,有100个表已经算多的了,这样存储最新ID的这个表也就100来条记录而已,在这样少的表中查询或者更新都是很快的。
创建一个表存存储所有表的最大 id,当要向一个表中插入一条记录时:
private static readonly Object Locker = new Object();
public static int GetCurrentID(string TableName){
lock(Locker){
int newid = 找到这个表当前ID
使这个表的最大ID加1
return newid;
}
}
这样,在插入之前就知道了新记录的ID值。不足之处是这种做法使每次插入数据时都要至少三次访问数据库。不过,我觉得这种消耗还不至于影响性能,因为一个数据库系统中表的数量应该不会太多,特别是 access 这样的数据库,有100个表已经算多的了,这样存储最新ID的这个表也就100来条记录而已,在这样少的表中查询或者更新都是很快的。
#20
·谢谢楼上的提醒,你一说到的表格我就有创意了,我可以将查询结果统统装入DataTable中在用Select...的方法去DataTable操作,这样就不至于消耗资源了。
#21
我想问下,如果是个登陆注册。有两个或多个用户同时注册,写入数据库,他们也要相应返回各自的ID,那查表法就不行了,请问有什么好的方法吗?可以象APPLICATION中那样LOCK吗?
#1
再做一次查询"select top 1 [ID] from table order by [ID] desc"
#2
或者select @@IDENTITY from table
#3
·这个方法我早想到了,我的意思是在插入数据时返回ID,就像可以SQL里可以设置存储过程返回值一样。
#4
Access是不支持Batch Command和存储过程的,只能两次访问
#5
·要是实在没有办法的话,我只能改变我的数据操作结构了,原以为是用SQL呢!唉~
#6
将表的id列设为自动递增,添加数据后,select此表的max(id)就可以了
#7
·谢谢你的关注。
#8
insert tablename values('','') select @@IDENTITY
这样写就可以返回你要的值啊
insert 本来是返回影响的行数,不过后面就selec就会返回你要的最大值了
传sql语句的时候其实是可以一次传多条的
分两次传浪费资源没什么意义
这样写就可以返回你要的值啊
insert 本来是返回影响的行数,不过后面就selec就会返回你要的最大值了
传sql语句的时候其实是可以一次传多条的
分两次传浪费资源没什么意义
#9
string strCmd = "insert into Date(字段名1,字段名2) values('value','value') select max(id)"
---
int id = OleDbCommand(OleCon, strCmd)
------
·是不是这样写,id就可以返回当前插入数据的Id了?
---
int id = OleDbCommand(OleCon, strCmd)
------
·是不是这样写,id就可以返回当前插入数据的Id了?
#10
mark
#11
·mark,什么意思?装酷
#12
请问select max(id)会不会有并发问题
#13
估计会拿到亚值
#14
关注一下~
#15
·向大家求助
#16
好像只能max()了
#17
#18
你奶奶的,又是倒分贴
#19
我一般是用查表法:
创建一个表存存储所有表的最大 id,当要向一个表中插入一条记录时:
private static readonly Object Locker = new Object();
public static int GetCurrentID(string TableName){
lock(Locker){
int newid = 找到这个表当前ID
使这个表的最大ID加1
return newid;
}
}
这样,在插入之前就知道了新记录的ID值。不足之处是这种做法使每次插入数据时都要至少三次访问数据库。不过,我觉得这种消耗还不至于影响性能,因为一个数据库系统中表的数量应该不会太多,特别是 access 这样的数据库,有100个表已经算多的了,这样存储最新ID的这个表也就100来条记录而已,在这样少的表中查询或者更新都是很快的。
创建一个表存存储所有表的最大 id,当要向一个表中插入一条记录时:
private static readonly Object Locker = new Object();
public static int GetCurrentID(string TableName){
lock(Locker){
int newid = 找到这个表当前ID
使这个表的最大ID加1
return newid;
}
}
这样,在插入之前就知道了新记录的ID值。不足之处是这种做法使每次插入数据时都要至少三次访问数据库。不过,我觉得这种消耗还不至于影响性能,因为一个数据库系统中表的数量应该不会太多,特别是 access 这样的数据库,有100个表已经算多的了,这样存储最新ID的这个表也就100来条记录而已,在这样少的表中查询或者更新都是很快的。
#20
·谢谢楼上的提醒,你一说到的表格我就有创意了,我可以将查询结果统统装入DataTable中在用Select...的方法去DataTable操作,这样就不至于消耗资源了。
#21
我想问下,如果是个登陆注册。有两个或多个用户同时注册,写入数据库,他们也要相应返回各自的ID,那查表法就不行了,请问有什么好的方法吗?可以象APPLICATION中那样LOCK吗?