问题描述
一个奇怪的问题作业模式:不同的人,在不同的地方扫描货物Barcode(唯一)入库软件架构:Wcf做Webserver,InstanceContextMode.PerCall模式数据库:Mysql5.5参数传递:客户端获取strXml=ds.GetXml()的字符串,Server端StringReadersr=newStringReader(strXml);ds.ReadXml(sr);StringReadersr=newStringReader(oTagInfo.InputParams[0]);ds.ReadXml(sr);for(inti=0;i<ds.Tables[0].Rows.Count;i++)//ds.Tables[0].Rows.Count=1{stringPalletNo=ds.Tables[0].Rows[i]["托盘号"].ToString();stringSLCodeID=ds.Tables[0].Rows[i]["库位"].ToString();stringModuleToSL_ConditionID=ds.Tables[0].Rows[i]["卡关条件ID"].ToString();stringOpUserID=oTagInfo.UserID;//"Admin";//ds.Tables[0].Rows[i]["颜色"].ToString();stringStatus="0";//0----入库初始状态为;1-----已拼柜;-1------退库sql+="insertintowarehouse.modulebindingsl(PalletNo,SLCodeID,ModuleToSL_ConditionID,OpUserID,CreateDateTime,Status,Computer)values"+"('"+PalletNo+"','"+SLCodeID+"','"+ModuleToSL_ConditionID+"','"+OpUserID+"',now(),'"+Status+"','"+oTagInfo.ComputerName+"');";}DB.ExecuteNonquery(DB.MySqlconn,sql,refresult);sr.Close();
数据库有一个自增列,但是出现不同的人(工号不同,登入的客户端不是一个)在不同的地方(仓库不同),却出现同一个barcode在相邻的自增列,在同一时间点Insert到了数据库,出现3笔,不得其解
解决方案
解决方案二:
自己顶一下。
解决方案三:
有没有人知道啊
解决方案四:
stringPalletNo=ds.Tables[0].Rows[i]["托盘号"].ToString();
一样不一样你需要看这个获取的是什么
解决方案五:
引用3楼FoxDave的回复:
stringPalletNo=ds.Tables[0].Rows[i]["托盘号"].ToString();一样不一样你需要看这个获取的是什么
扫一次就立即写入数据库,所以ds.Tables[0].Rows.Count=1,软件客户端每台电脑只能打开一个,登入工号,选择好库位,作业模式决定在一个ds里面不可能有两笔
解决方案六:
这种你还是客户端和服务端同时写日志对比吧就你贴出来的代码没任何参考意义
解决方案七:
引用5楼starfd的回复:
这种你还是客户端和服务端同时写日志对比吧就你贴出来的代码没任何参考意义
只有这样了。
解决方案八:
你这逻辑好像有问题的你的barcode是数据库读出来的,那么在同一时间不同的人读到的不都是一样的么?
解决方案九:
引用7楼rtdb的回复:
你这逻辑好像有问题的你的barcode是数据库读出来的,那么在同一时间不同的人读到的不都是一样的么?
barcode是实物扫描的,不同的人(工号不同),不同的客户端(每个pc只能运行一个),在不同的地点(仓库不同),按道理不可能刷到同一个barcode而且在同一时间点(途中时间一样,自增列相差1)
解决方案十:
应该是你的Table有问题吧?而table如果是从服务端读过来的,那么很有可能是服务端读取数据的时候出问题了。如果你服务端读取的是操作人员信息的话,那是不是查询语句写错导致多读了一个出来?然后客户端在扫描的时候又把barcode填充到每一行里了,才导致现在这种情况的
解决方案十一:
你可能一次性插入了两条以上的数据当然会有相同的时间咯
解决方案十二:
解决方案十三:
引用9楼qq_26456659的回复:
应该是你的Table有问题吧?而table如果是从服务端读过来的,那么很有可能是服务端读取数据的时候出问题了。如果你服务端读取的是操作人员信息的话,那是不是查询语句写错导致多读了一个出来?然后客户端在扫描的时候又把barcode填充到每一行里了,才导致现在这种情况的
table是客户端通过把字符串ds.GetXml()传给服务端的,包含barcode、仓库、工号,仓库是选择的,工号是登入客户端的账号,这两者需要同时改变的话需要退出客户端
解决方案十四:
引用11楼c136900141的回复:table是客户端通过把字符串ds.GetXml()传给服务端的,包含barcode、仓库、工号,仓库是选择的,工号是登入客户端的账号,这两者需要同时改变的话需要退出客户端,table只包含一条记录