华-fu 2022-01-26 09:53 采纳率: 66.7%
浏览 127
已结题

C#MVC 使用EF来循环执行SQL UPDATE更新语句偶尔出现数据未被更新问题

在使用C#MVC中的EF执行SQL UPDATE语句,偶尔出现有些数据未被更新,但是日志记录的更新语句和返回值都是正常的。

比如八条数据请求过来,日志记录执行的SQL为八条,且success记录的返回也是成功了八条,但是偶尔出现只有七条被更新,一条未被更新的情况。

更新代码如下
using (var db = dbcontext.GetContext())
                    {
                        string sql = "";
                        int success = 0;
                        string BatchNo;
                        string orderid;
                        foreach (var item in list)  //遍历数据写入数据库
                        {
                            BatchNo= Convert.ToString(item.BatchNo);
                            orderid = Convert.ToString(item.orderid);
                            sql = "select count(*) from mytable where orderid = '{0}'";
                            sql = string.Format(sql, item.orderid);
                            int y = db.Database.SqlQuery<int>(sql).FirstOrDefault();
                            if (y == 0)
                            {
                                sql = "update mytable set Orderid = '{0}',Isach='{1}' where BatchNo= '{2}'"; 
                                sql = string.Format(sql, orderid, 1, BatchNo);
                                success += db.Database.ExecuteSqlCommand(sql);
                                db.SaveChanges();
                                orderid = "";
                                logger.Info(sql);//记录执行的sql到日志
                            }
                            FGMPBatchNo = "";

                        }
                        logger.Info("请求数据为:" + data + "请求结果为:成功" + success + "条,失败:" + (list.Count - success) + "条");
                        
                        if (success == list.Count)
                        {
                            return GetSuccessMessage("记录数据成功");
                        }
                        else
                        {
                            return GetErrorMessage("成功记录:" + success + "条,失败:" + (list.Count - success) + "条");
                        }
                    }

使用日志记录了每条SQL语句,并记录了每次请求记录成功条数success,也查了数据库,该条件的数据的确是存在的,但是数据库该条数据未被更新。
望能解答疑问,感谢
  • 写回答

1条回答 默认 最新

  • HoWorlds 2022-01-26 10:33
    关注

    首先 你这个sql = "update mytable set Orderid = '{0}',Isach='{1}' where BatchNo= '{2}'";
    sql = string.Format(sql, orderid, 1, BatchNo); 其实可以直接sql = $"update mytable set Orderid = '{orderid}',Isach='{1}' where BatchNo= '{BatchNo}'"
    其二,最好不要循环执行修改,直接先看是什么数据库操作,直接 sql+拼接成一条长长的sql字符串,直接执行一次就可以了,效率好一点
    其三,得用事务执行,多条操作最好就是用到事务

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月11日
  • 已采纳回答 3月3日
  • 修改了问题 1月26日
  • 创建了问题 1月26日

悬赏问题

  • ¥18 深度学习tensorflow1,ssdv1,coco数据集训练一个模型
  • ¥100 关于注册表摄像头和麦克风的问题
  • ¥30 代码本地运行正常,但是TOMCAT部署时闪退
  • ¥15 关于#python#的问题
  • ¥15 主机可以ping通路由器但是连不上网怎么办
  • ¥15 数据库一张以时间排好序的表中,找出多次相邻的那些行
  • ¥50 关于DynamoRIO处理多线程程序时候的问题
  • ¥15 kubeadm部署k8s出错
  • ¥15 Abaqus打不开cae文件怎么办?
  • ¥15 小程序准备上线,软件开发公司需要提供哪些资料给甲方