在core项目下通过Dapper对mysql执行批量操作 报at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)错误

发布时间 2023-08-16 16:58:17作者: 一只小青蛙-呱-呱-dyj

 

在core项目下通过Dapper对mysql执行批量操作一直报异常 

 

报PushService=>UpdateKeyWordProductCountTask=>错误信息:Fatal error encountered during command execution.;;;堆栈信息: at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
at Dapper.SqlMapper.ExecuteCommand(IDbConnection cnn, CommandDefinition& command, Action`2 paramReader) in /_/Dapper/SqlMapper.cs:line 2848
at Dapper.SqlMapper.ExecuteImpl(IDbConnection cnn, CommandDefinition& command) in /_/Dapper/SqlMapper.cs:line 581
at Dapper.SqlMapper.Execute(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Nullable`1 commandTimeout, Nullable`1 commandType) in /_/Dapper/SqlMapper.cs:line 452
at Infratructure.Persistence.Repository.SyncProResponsity.EditUrlKeyWords(IList`1 strSqls) in /src/Infratructure/Repository/Responsity.cs:line 80
at SpzsPushService.Worker.<>c__DisplayClass14_0.<UpdateKeyWordProductCountTask>b__0() in /src/PushService/Worker.cs:line 649

 

最后排查出问题是因为在core封装的Dapper在执行批量操作的时候会判断你传的参数,参数为null会按照单条执行,参数不为null按照批量执行

 

最终执行是应该以下格式处理

 

 

以下是其他的执行语句格式

Dapper-Execute

Ececute是一种可被任何IDbConnection类型的对象调用的扩展方法。它可以执行一次或多次命令, 并返回受影响的行数。此方法通常用于执行存储过程、插入、更新、删除

存储过程

单次执行

多次执行

 

插入

 

更新

 

删除

 

 Dapper 批量更新

1.使用Where In 实现批量更新

 

2.更新多条数据,每一条数据更新的内容可不相同

 

执行语句摘抄至:https://www.cnblogs.com/ys9527/p/10524380.html