Sqlsuger批量插入或更新报错 返回

当我使用sqlsuger 进行批量更新的时候会报错,提示update必须要where条件
var x = db.Storageable<T>(t).As(TableName).WhereColumns(WhereColumns).ToStorage();
int I = x.AsInsertable.ExecuteCommand(); //执行插入
int U = x.AsUpdateable.ExecuteCommand(); //再此行报错
热忱回答(15)
-
fate sta VIP0
6天前按模版提供完整用例 https://www.donet5.com/Home/Doc?typeId=2366
0 回复 -
🐾 VIP0
6天前@fate sta:我修改了一下实现方法,现在进行批量插入的时候报错提示必须要有where条件,我传入的参数是个t是个list出现这种问题的原因是因为我写法的错误吗。但我是按照官方示例写的啊。
0 回复 -
🐾 VIP0
6天前0 回复 -
fate sta VIP0
6天前写个DEMO自个验证一下,有问题发我, 因为上面的功能是稳定功能,你问了我这边也没办法给你重现
0 回复 -
🐾 VIP0
6天前@fate sta:我找到问题所在了,如果数据库内主键是字符串类型的话就会出现这种情况
demo需要我发给你吗
0 回复 -
@🐾: 610262374@qq.com
0 回复 -
🐾 VIP0
6天前@fate stay night:发给你了
0 回复 -
fate sta VIP0
6天前@🐾:我这边测试没问题
0 回复 -
fate sta VIP0
6天前---------
0 回复 -
fate sta VIP0
6天前----------
0 回复 -
fate sta VIP0
6天前--------------
0 回复 -
fate sta VIP0
6天前db.Aop.OnExecutingChangeSql = (sql, pars) => //SQL执行前 可以修改SQL
{
if (sql.TrimStart().IndexOf("update ", StringComparison.CurrentCultureIgnoreCase) == 0)
{
if (sql.IndexOf("where", StringComparison.CurrentCultureIgnoreCase) <= 0)
{
throw new Exception("update更新方法需要有where条件!!");
}
}
return new KeyValuePair<string, SugarParameter[]>(sql, pars);
};
找到原因了你自写的AOP有问题
0 回复 -
fate sta VIP0
6天前UPDATE S SET S.[id]=T.[id],S.[goodscount]=T.[goodscount],S.[goodsprice]=T.[goodsprice],S.[goodsname]=T.[goodsname] FROM [goods] S INNER JOIN ( SELECT N'0' AS [id],N'F005' AS [goodsno],N'测试sqlsuger' AS [goodsspec],N'1' AS [goodscount],N'309' AS [goodsprice],N'5' AS [goodsname] UNION ALL SELECT N'0' AS [id],N'F006' AS [goodsno],N'测试sqlsuger' AS [goodsspec],N'1' AS [goodscount],N'309' AS [goodsprice],N'6' AS [goodsname] UNION ALL SELECT N'0' AS [id],N'F007' AS [goodsno],N'测试sqlsuger' AS [goodsspec],N'1' AS [goodscount],N'309' AS [goodsprice],N'7' AS [goodsname] ) T ON S.[goodsno]=T.[goodsno] AND S.[goodsspec]=T.[goodsspec] ;
ORM生成的SQL没有WHERE ET 用的是联表 ON , 所你的 AOP扔出错误, 正确的是验证是否有 ON或者有 WHERE
0 回复 -
fate sta VIP0
6天前var x = db.Storageable<T>(t).As(TableName).WhereColumns(WhereColumns).ToStorage(); int I = x.AsInsertable .ExecuteCommand(); //执行插入 int U = x.AsUpdateable .ExecuteCommand();
代码你也可以简化一下
0 回复 -
🐾 VIP0
5天前@fate sta:好的,谢谢给您添麻烦了。
0 回复