.net 连接Access数据库插入记录后查询自增id

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.将这两条语句放到一个数据库执行中,也就是数据库打开一次即把这两条语句全部执行完成。

 /// <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); 

原因: ACCESS不支持多条语句放在一起执行,必须在代码里面依次执行

详细信息请查看http://kb.cnblogs.com/a/1511977/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值