以下代码需要执行再次命令?这样会不会很慢,有没有更快更好的方法?
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
你只是要最后一条记录的id吗?如果是要最后一条记录,那SQL语句完全可以实现,因为不管怎么说,都是要和数据库打交道的,所以每必要先取其id
#4
你可以尝试用executescalar,默认的返回值应该是id.
如果在sql里用存储过程返回@@identity就可以搞定,但是access里不可以吧 !
如果在sql里用存储过程返回@@identity就可以搞定,但是access里不可以吧 !
#5
这个好像是没有什么好办法的了
#6
好象没有
#7
sql = "select UserID from Account_User where QQ = " + qq;
--------------------
sql = "select max(UserID) from Account_User" //这样也可以,不过好象也差不多
--------------------
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
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到有结果为止。
当然,你可以用一些其他奇怪的方法来实现。例如多加两个字段,一个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
SELECT @@Identity
返回最近操作的自增id
#1
up
#2
怎解没人讲我知
#3
我想不出什么好办法,用datareader取数据已经是最快的了。如果实在想取值,我认为可以设置一个静态变量,在第一次数据库操作的时候就索性把最后一条数据的id取出来,以后每次插入数据的时候该变量加1。
你只是要最后一条记录的id吗?如果是要最后一条记录,那SQL语句完全可以实现,因为不管怎么说,都是要和数据库打交道的,所以每必要先取其id
你只是要最后一条记录的id吗?如果是要最后一条记录,那SQL语句完全可以实现,因为不管怎么说,都是要和数据库打交道的,所以每必要先取其id
#4
你可以尝试用executescalar,默认的返回值应该是id.
如果在sql里用存储过程返回@@identity就可以搞定,但是access里不可以吧 !
如果在sql里用存储过程返回@@identity就可以搞定,但是access里不可以吧 !
#5
这个好像是没有什么好办法的了
#6
好象没有
#7
sql = "select UserID from Account_User where QQ = " + qq;
--------------------
sql = "select max(UserID) from Account_User" //这样也可以,不过好象也差不多
--------------------
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
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到有结果为止。
当然,你可以用一些其他奇怪的方法来实现。例如多加两个字段,一个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
SELECT @@Identity
返回最近操作的自增id