★ 向Access库中插入一条数据后,有什么方法可以返回这条数据的ID?

时间:2022-02-22 21:41:06
向Access库中插入一条数据后,有什么方法可以返回这条数据的ID?

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语句的时候其实是可以一次传多条的
分两次传浪费资源没什么意义

#9


string strCmd = "insert into Date(字段名1,字段名2) values('value','value') select max(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来条记录而已,在这样少的表中查询或者更新都是很快的。

#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语句的时候其实是可以一次传多条的
分两次传浪费资源没什么意义

#9


string strCmd = "insert into Date(字段名1,字段名2) values('value','value') select max(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来条记录而已,在这样少的表中查询或者更新都是很快的。

#20


·谢谢楼上的提醒,你一说到的表格我就有创意了,我可以将查询结果统统装入DataTable中在用Select...的方法去DataTable操作,这样就不至于消耗资源了。

#21


我想问下,如果是个登陆注册。有两个或多个用户同时注册,写入数据库,他们也要相应返回各自的ID,那查表法就不行了,请问有什么好的方法吗?可以象APPLICATION中那样LOCK吗?