Access中插入一条记录后,怎样方便取得该记录的UserID(自动编号)?

时间:2021-05-04 00:26:02
Access中插入一条记录后,怎样方便取得该记录的UserID(自动编号)?
以下代码需要执行再次命令?这样会不会很慢,有没有更快更好的方法?
string qq = "88";
string sql = "insert into Account_User (QQ) values (" + qq + ")";
string str = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=d:\project\953\Database\953.mdb";
OleDbConnection con = new OleDbConnection(str);
OleDbCommand command = new OleDbCommand(sql, con);
con.Open();
command.ExecuteNonQuery();
sql = "select UserID from Account_User where QQ = " + qq;
command.CommandText = sql;
OleDbDataReader reader = command.ExecuteReader();
reader.Read();
Response.Write(reader["UserID"].ToString());
con.Close();

13 个解决方案

#1


up

#2


怎解没人讲我知

#3


我想不出什么好办法,用datareader取数据已经是最快的了。如果实在想取值,我认为可以设置一个静态变量,在第一次数据库操作的时候就索性把最后一条数据的id取出来,以后每次插入数据的时候该变量加1。
你只是要最后一条记录的id吗?如果是要最后一条记录,那SQL语句完全可以实现,因为不管怎么说,都是要和数据库打交道的,所以每必要先取其id

#4


你可以尝试用executescalar,默认的返回值应该是id.
如果在sql里用存储过程返回@@identity就可以搞定,但是access里不可以吧 !

#5


这个好像是没有什么好办法的了

#6


好象没有

#7


sql = "select UserID from Account_User where QQ = " + qq;
--------------------
sql = "select max(UserID) from Account_User" //这样也可以,不过好象也差不多

#8


http://www.glocksoft.com/ep/ug_identity_value.htm
http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B815629

#9


呵呵,肯定需要二次执行。

#10


数据库都是存取的,你不取是不知道当前状态的

#11


gz

#12


Access不是MSSQL,没有“事务”,你不可能指望数据库直接支持实现你的要求。

当然,你可以用一些其他奇怪的方法来实现。例如多加两个字段,一个TimeStamp,一个RandomKey:
在Insert之前在程序中给TimeStamp赋值现在的时间,给RandomKey赋值一个随机数(多长就看你对风险控制的要求了),然后一次过Insert到数据库里面。
然后尝试Select出TimeStamp和RandomKey都和钢材的Insert语句一样的记录——不要指望一次Select就会有记录,因为Access是没有事务的,Insert之后马上Select是很可能Select不到刚刚Insert的记录的。所以你需要做一个Timer或者什么东西,过几十毫秒再去Select直到Select到有结果为止。

#13


如果你的access是2000以上南么可以使用
 SELECT @@Identity 
返回最近操作的自增id

#1


up

#2


怎解没人讲我知

#3


我想不出什么好办法,用datareader取数据已经是最快的了。如果实在想取值,我认为可以设置一个静态变量,在第一次数据库操作的时候就索性把最后一条数据的id取出来,以后每次插入数据的时候该变量加1。
你只是要最后一条记录的id吗?如果是要最后一条记录,那SQL语句完全可以实现,因为不管怎么说,都是要和数据库打交道的,所以每必要先取其id

#4


你可以尝试用executescalar,默认的返回值应该是id.
如果在sql里用存储过程返回@@identity就可以搞定,但是access里不可以吧 !

#5


这个好像是没有什么好办法的了

#6


好象没有

#7


sql = "select UserID from Account_User where QQ = " + qq;
--------------------
sql = "select max(UserID) from Account_User" //这样也可以,不过好象也差不多

#8


http://www.glocksoft.com/ep/ug_identity_value.htm
http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B815629

#9


呵呵,肯定需要二次执行。

#10


数据库都是存取的,你不取是不知道当前状态的

#11


gz

#12


Access不是MSSQL,没有“事务”,你不可能指望数据库直接支持实现你的要求。

当然,你可以用一些其他奇怪的方法来实现。例如多加两个字段,一个TimeStamp,一个RandomKey:
在Insert之前在程序中给TimeStamp赋值现在的时间,给RandomKey赋值一个随机数(多长就看你对风险控制的要求了),然后一次过Insert到数据库里面。
然后尝试Select出TimeStamp和RandomKey都和钢材的Insert语句一样的记录——不要指望一次Select就会有记录,因为Access是没有事务的,Insert之后马上Select是很可能Select不到刚刚Insert的记录的。所以你需要做一个Timer或者什么东西,过几十毫秒再去Select直到Select到有结果为止。

#13


如果你的access是2000以上南么可以使用
 SELECT @@Identity 
返回最近操作的自增id