.net怎么在一个事务里完成这两步操作,先查最大单号fid,然后插入记录,并且保证别的用户不会取到同一个最大单号FID

windspeed 2006-05-15 11:17:26
我之前写的事务大概过程如下面
首先从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;
}
...全文
282 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangxiaopin 2006-06-12
  • 打赏
  • 举报
回复
//****用存储过程
CREATE PROCEDURE dbo.Proc_Order_Insert
(
@OrderID varchar(50),
@OrderDate datetime,
@Month datetime
)
AS
begin

declare @mMonth varchar(10)
declare @mNewOrderID varchar(50);

set @mMonth=month(@Month);

if(@mMonth<>2)
begin
set @mMonth="0"+@mMonth;
end

select @mNewOrderID=max(orderid) from tb_orders where (1>0) and orderid=@orderid

if(@mNewOrderID is null)
begin

set @mNewOrderID='JS0001'+@mMonth+'0001';

end
else
begin
set @mNewOrderID=@mNewOrderID+1;
end

end
RETURN
GO
自由人2008 2006-06-12
  • 打赏
  • 举报
回复
好象有个事物锁,不过没用过。
lk919 2006-06-12
  • 打赏
  • 举报
回复
用触发器
lnwuyaowei 2006-06-12
  • 打赏
  • 举报
回复
将select取得ID号,与插入表记录放在同一个存贮过程中,并在存贮过程中设定事务,看看怎么样??
windspeed 2006-06-12
  • 打赏
  • 举报
回复
??
windspeed 2006-05-16
  • 打赏
  • 举报
回复
按照设计要求不能设置成自动增长的

webwait 2006-05-15
  • 打赏
  • 举报
回复
fid设成自动标示的,新增的总是最大的,这样行吗?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧