strsql = "insert into table1(name)values("");
dbHelper.execute(strsql) ; //dbHelper 为数据库操作类,自己封装的
strSelectId = "select max(id) from table1"; //id为表table1的自增列
int MaxId = dbHelper.executeSelect(strSelectId); //MaxId 得到的不是当前插入记录的id,而是上一条记录的id
当表的记录为空的时候MaxId为0,此时是正确的。但是当插入记录后此时的 MaxId 却是插入记录id的上一条(也就是当前记录id减一);
通过上网查找和自己实践,解决方法如下:
1.将这两条语句放到一个数据库执行中,也就是数据库打开一次即把这两条语句全部执行完成。
原因: ACCESS不支持多条语句放在一起执行,必须在代码里面依次执行/// <summary>
/// 实际类似于存储过程的方案。依次执行数组中的语句。最后一条语句使用ExecuteScalar返回值。
/// </summary>
/// <param name="strConnectionString"></param>
/// <param name="strSqls"></param>
/// <returns></returns>
public static object ExecuteScalar(String strConnectionString, String[] strSqls){OleDbConnection Oleconn = new OleDbConnection(strConnectionString);OleDbCommand cmd = new OleDbCommand();
cmd.Connection = Oleconn;
try{
Oleconn.Open();
int i = 0;foreach (String strSql in strSqls){
cmd.CommandText = strSql;
if (i < strSqls.Length - 1)cmd.ExecuteNonQuery();
else{
return cmd.ExecuteScalar();}
i++;
}
//永远不会执行到的语句。return null;}
catch{
return null;}
finally{
if (Oleconn.State == ConnectionState.Open)Oleconn.Close();
}
}
方法2.strsql = "insert into table1(name)values("");
dbHelper.execute(strsql) ; //dbHelper 为数据库操作类,自己封装的
Thread.sleep(2);
strSelectId = "select max(id) from table1"; //id为表table1的自增列
int MaxId = dbHelper.executeSelect(strSelectId);
详细信息请查看http://kb.cnblogs.com/a/1511977/