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

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日

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格