你的ID不是自动增长的那种?
如果不是那你就算一个表也得考虑并发啊 假定你用的是SQL Server如果
你的ID是自动增长的, 那使用 SCOPE_IDENTITY() 来返回, 如下declare @newId intinsert into table_A (column1, column2) values(v1, v2)select @newId = SCOPE_IDENTITY()insert into table_B (idcolumn, column3, column4) values (@newId, v3, v4)select @newId /* add this line if you want use the new id in your C# code */ 如果你的ID不是这样的, 那你得用事务, 然后锁表了, 建议单开一个表用来存储最后一个ID值。declare @newId intselect @newId = NextId from identity_log with (UPDLOCK) where tablename = 'table_A'insert into table_A ...insert into table_B ...UPDATE identity_log set NextId = @newId + 1 where tablename = 'table_A' 这段代码要运行在事务中, 推荐使用 SqlTransaction 或 TransactionScope当然也以把以上的SQL改一下, 加个 begin tran, rollback tran, commit tran, 并正确使用 if(@@error <>0)1、数据库有
主键。插入数据不会出现你说的什么错误或不稳定吧
2、调用sql对数据库修改本身是自动上锁的。
如果要保证程序逻辑的一致性需要使用事务。
3、比如主键递增这种情况,或者只要是有主键。
4、程序无论用什么方式,都不可能在数据库中插入两条主键相同的记录。
5、同时多人使用,是否包括一种情况:同时多人修改(包括删除)。如果仅仅是同时多人添加,那么毫无问题。不会有并发问题
6、如果存在同时多人修改的可能性的话,那就需要用“开放式并发”或“非开放式并发”。
7、开放式并发”相对简单。即:一个人修改并提交,被告知原始数据已被修改,则报错自己找找这方面资料吧,VS与.NET已经集成了一些简单实现的方法。
评论列表(0条)