假设有这样一张表
table1
id varchar 主键 //格式为yyyyMMdd00001~yyyyMMdd99999
有一个方法,GetID()//取的当天表中的最大序列并加1。增加一条数据的方法,Create()//调用GetID()方法,获得最大序列后,插入一条新数据。问题是在多线程中即使锁了,GetID()还是会得到一样的值,导致无法插入数据库(主键相同)。。代码如下 static readonly object ob = new object();
private static string GetID()
{
string id="";
lock(ob)
{
//查询最大序列
//系列重新组合,把最大序列+1赋给id.
}
retun id
}private static void Create()
{
//增加一条数据,前提调用GetID()方法,获得最大序列,
}我想GetID()方法中的查询最大序列的Sql同一时间只有一个线程再用,为什么还是会查到相同的id呢。
table1
id varchar 主键 //格式为yyyyMMdd00001~yyyyMMdd99999
有一个方法,GetID()//取的当天表中的最大序列并加1。增加一条数据的方法,Create()//调用GetID()方法,获得最大序列后,插入一条新数据。问题是在多线程中即使锁了,GetID()还是会得到一样的值,导致无法插入数据库(主键相同)。。代码如下 static readonly object ob = new object();
private static string GetID()
{
string id="";
lock(ob)
{
//查询最大序列
//系列重新组合,把最大序列+1赋给id.
}
retun id
}private static void Create()
{
//增加一条数据,前提调用GetID()方法,获得最大序列,
}我想GetID()方法中的查询最大序列的Sql同一时间只有一个线程再用,为什么还是会查到相同的id呢。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货