日期:2014-05-17  浏览次数:20503 次

不能在对象中插入重复键
得ID都是通过存储过程处理ID=ID+1;为什么服务生成数据的时候 就会产生重复ID

服务自动生成报表数据不行报错,手动生成又可以;两种处理方式代码一模一样。

为什么呢?!

------解决方案--------------------
ID设置为自动增长好了。干嘛要手工指定呢?
------解决方案--------------------
如果编号有特别,如要求A或B或C开头,那要写存储过程生成,如果编号没有什么意义,就用自动递增ID就可以了
------解决方案--------------------
引用:
得ID都是通过存储过程处理ID=ID+1;为什么服务生成数据的时候 就会产生重复ID

服务自动生成报表数据不行报错,手动生成又可以;两种处理方式代码一模一样。

为什么呢?!


为你的 ID=ID+1 这一行代码前后加上
lock(StaticLockObject)
{
    .....
}

这样的代码。
------解决方案--------------------
如果你是远程客户端通过关系数据库的远端驱动程序去执行 ID=ID+1,没有将业务服务(应用服务)独立出来,那么加锁就没用了。

那么需要修改你的数据库设计,应该使用guid等随机编号,而不是这类 ID+1 编号。
------解决方案--------------------
获取最大ID+1
select isnull(max(ID),0)+1 from Table
------解决方案--------------------
ID 一般用uniqueidentifie类型