苏飞论坛

标题: 并发控制 一般都怎么处理啊????? [打印本页]

作者: icelee1987    时间: 2014-1-10 11:34
标题: 并发控制 一般都怎么处理啊?????
我有个表,里面 名称字段不能重复,数据库没加 唯一约束,

多用户同时新增的时候,怎么防止名称不会重复。

         
[C#] 纯文本查看 复制代码
       var result = dll.IsExist(model.PropertyField, model.PropertyName);
                if (result)
                {
                    note = "系统中已经存在该操作项!";
                    return false;
                }
                return dll.AddParam(model);



如果在他们执行 add 之前,都把 isExist 通过了,就好出现名称重复,扎处理啊?

还有就是 一个新增 名称为 'name',一个修改 名称为‘name’ 扎处理?

程序里面 加 lock 但是如果发布到多台服务器,好像没办法能控制了

求解答啊,谢谢了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

作者: 站长苏飞    时间: 2014-1-10 11:36
在数据库加上事务就行了吧
作者: icelee1987    时间: 2014-1-10 11:42
站长苏飞 发表于 2014-1-10 11:36
在数据库加上事务就行了吧

不行,我试了
[SQL] 纯文本查看 复制代码
BEGIN TRANSACTION

UPDATE dbo.BaseInfos SET PropertyName='' WHERE 1=0 AND PropertyName='test1'
SELECT COUNT(1) FROM dbo.BaseInfos WHERE PropertyName='test1'

INSERT INTO dbo.BaseInfos
VALUES  ( 'test1' , -- PropertyName - varchar(30)
          't1' , -- PropertyField - varchar(30)
          'test1' , -- PropertyContent - varchar(500)
          0 , -- OrderNum - int
          'sys' , -- Updater - varchar(10)
          '2014-01-10 02:20:23' , -- UpdateTime - datetime
          '2014-01-10 02:20:23' , -- CreateTime - datetime
          'sys' , -- Creater - varchar(10)
          0  -- IsFlag - int
        )

--COMMIT TRANSACTION


这个 没提交前,另一个事务,也可以添加成功

作者: 站长苏飞    时间: 2014-1-10 11:45
我说错了,光加事务不行,还得加锁
就是同时只能有一个人操作这张表才行。你在Sql语句中加一个锁就行了应该
作者: icelee1987    时间: 2014-1-10 12:08
站长苏飞 发表于 2014-1-10 11:45
我说错了,光加事务不行,还得加锁
就是同时只能有一个人操作这张表才行。你在Sql语句中加一个锁就行了应 ...

TABLOCKX 加个表锁吗?

作者: 站长苏飞    时间: 2014-1-10 12:28
恩是的
作者: icelee1987    时间: 2014-1-10 13:14
站长苏飞 发表于 2014-1-10 12:28
恩是的

额,谢谢

作者: 站长苏飞    时间: 2014-1-10 13:15
你试试效果怎么样




欢迎光临 苏飞论坛 (http://www.sufeinet.com/) Powered by Discuz! X3.4