Wcf+Mysql 数据传参内存级 错误?

tg_hgh163 2016-03-22 09:54:30
一个奇怪的问题
作业模式:不同的人,在不同的地方 扫描货物Barcode(唯一)入库
软件架构:Wcf 做 Webserver,InstanceContextMode.PerCall 模式
数据库:Mysql 5.5
参数传递:客户端获取 strXml=ds.GetXml() 的字符串,Server端 StringReader sr = new StringReader(strXml);
ds.ReadXml(sr);

 StringReader sr = new StringReader(oTagInfo.InputParams[0]);
ds.ReadXml(sr);

for (int i = 0; i < ds.Tables[0].Rows.Count; i++) // ds.Tables[0].Rows.Count=1
{
string PalletNo = ds.Tables[0].Rows[i]["托盘号"].ToString();
string SLCodeID = ds.Tables[0].Rows[i]["库位"].ToString();
string ModuleToSL_ConditionID = ds.Tables[0].Rows[i]["卡关条件ID"].ToString();
string OpUserID = oTagInfo.UserID;// "Admin";// ds.Tables[0].Rows[i]["颜色"].ToString();
string Status = "0"; // 0----入库初始状态为 ;1-----已拼柜; -1 ------退库
sql += " insert into warehouse.modulebindingsl (PalletNo,SLCodeID,ModuleToSL_ConditionID , OpUserID , CreateDateTime,Status ,Computer) values " +
"('" + PalletNo + "','" + SLCodeID + "','" + ModuleToSL_ConditionID + "','" + OpUserID + "', now(),'" + Status + "','"+oTagInfo.ComputerName+"');";


}
DB.ExecuteNonquery(DB.MySqlconn, sql, ref result);
sr.Close();

数据库有一个自增列,但是出现不同的人(工号不同,登入的客户端不是一个)在不同的地方(仓库不同),却出现同一个barcode在相邻的自增列,在同一时间点Insert到了数据库,出现3笔,不得其解
...全文
166 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
tg_hgh163 2017-04-24
  • 打赏
  • 举报
回复
我找到原因了:多线程并行,ConditionID没有及时更新就insert了
c136900141 2016-03-23
  • 打赏
  • 举报
回复
c136900141 2016-03-23
  • 打赏
  • 举报
回复
你可能一次性插入了两条以上的数据当然会有相同的时间咯
熊猫rrr 2016-03-23
  • 打赏
  • 举报
回复
应该是你的Table有问题吧?而table如果是从服务端读过来的,那么很有可能是服务端读取数据的时候出问题了。如果你服务端读取的是操作人员信息的话,那是不是查询语句写错导致多读了一个出来?然后客户端在扫描的时候又把barcode填充到每一行里了,才导致现在这种情况的
tg_hgh163 2016-03-23
  • 打赏
  • 举报
回复
引用 7 楼 rtdb 的回复:
你这逻辑好像有问题的

你的barcode是数据库读出来的,
那么在同一时间不同的人读到的不都是一样的么?

barcode 是实物扫描的,不同的人(工号不同),不同的客户端(每个pc只能运行一个),
在不同的地点(仓库不同),按道理不可能刷到同一个barcode而且在同一时间点(途中时间一样,自增列相差1)
rtdb 2016-03-23
  • 打赏
  • 举报
回复
你这逻辑好像有问题的 你的barcode是数据库读出来的, 那么在同一时间不同的人读到的不都是一样的么?
tg_hgh163 2016-03-23
  • 打赏
  • 举报
回复
引用 5 楼 starfd 的回复:
这种你还是客户端和服务端同时写日志对比吧 就你贴出来的代码没任何参考意义
只有这样了。
  • 打赏
  • 举报
回复
这种你还是客户端和服务端同时写日志对比吧 就你贴出来的代码没任何参考意义
tg_hgh163 2016-03-23
  • 打赏
  • 举报
回复
引用 3 楼 FoxDave 的回复:
string PalletNo = ds.Tables[0].Rows[i]["托盘号"].ToString();
一样不一样你需要看这个获取的是什么
扫一次就立即写入数据库,所以 ds.Tables[0].Rows.Count=1, 软件客户端每台电脑只能打开一个,登入工号,选择好库位,作业模式决定在一个ds里面不可能有两笔
Justin-Liu 2016-03-23
  • 打赏
  • 举报
回复
string PalletNo = ds.Tables[0].Rows[i]["托盘号"].ToString();
一样不一样你需要看这个获取的是什么
tg_hgh163 2016-03-23
  • 打赏
  • 举报
回复
有没有人知道啊
tg_hgh163 2016-03-23
  • 打赏
  • 举报
回复
自己顶一下。
tg_hgh163 2016-03-23
  • 打赏
  • 举报
回复
引用 11 楼 c136900141 的回复:
table是客户端通过把字符串 ds.GetXml()传给服务端的,包含barcode、仓库、工号,仓库是选择的,工号是登入客户端的账号, 这两者需要同时改变的话 需要退出客户端,table只包含一条记录
tg_hgh163 2016-03-23
  • 打赏
  • 举报
回复
引用 9 楼 qq_26456659 的回复:
应该是你的Table有问题吧?而table如果是从服务端读过来的,那么很有可能是服务端读取数据的时候出问题了。如果你服务端读取的是操作人员信息的话,那是不是查询语句写错导致多读了一个出来?然后客户端在扫描的时候又把barcode填充到每一行里了,才导致现在这种情况的
table是客户端通过把字符串 ds.GetXml()传给服务端的,包含barcode、仓库、工号,仓库是选择的,工号是登入客户端的账号, 这两者需要同时改变的话 需要退出客户端

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧