华-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日

悬赏问题

  • ¥15 宇视监控服务器无法登录
  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥15 DruidDataSource一直closing
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据