.net怎么在一个事务里完成这两步操作,先查最大单号fid,然后插入记录,并且保证别的用户不会取到同一个最大单号FID
我之前写的事务大概过程如下面
首先从INVCHECK_MAIN 取到最大FID,然后开启事务,插入另外一张表INVCHECK
但是我后来发现经常在INVCHECK 中发现了重复的FID,为此
我把 chkSQL ="SELECT MAX(FID) AS MAXFID FROM INVCHECK_MAIN "; 放到
myconn.db_BeginTrans(); //开始事务 里面,发现程序执行不了,有人说一个连接里开始了事务不能再SELECT该张表了 (迷惑..)
现在我想怎么才能解决这个问题,不用存储过程,不对INVCHECK表的fid字段设置主键属性,只才程序中实现
并且保证数据的共享效率要高.
myconn.dbOpen(yZtConn,dbType); //开启数据库连接对象
chkSQL ="SELECT MAX(FID) AS MAXFID FROM INVCHECK_MAIN ";
SqlDataReader mydrmaxid = myconn.SQL_dbDataReader(chkSQL);
....
取最大的单号fid...
mydrmaxid.Close();
return maxid
mySql="insert into INVCHECK (FID,FNAME) VALUES( " +maxid+",'测试'")
try
{
myconn.db_BeginTrans(); //开始事务
e = myconn.db_DataExecute(mySql);
if (e==1)
{
myconn.db_CommitTrans(); //提交
myconn.dbClose();
if(tag==0)
{
return maxid;
}
else
{
return tag;
}
}
else
{
myconn.db_RollBackTrans();
myconn.dbClose();
return 0;
}
}
catch
{
myconn.db_RollBackTrans();
myconn.dbClose();
return 0;
}