一个SQLSugar字典操作使用问题
问题
在页面进行删除对象操作时报错,列名无效:
列名 'IsDeleted' 无效。
列名 'CreateTime' 无效。
列名 'Name' 无效。
基本信息
数据库:SqlServer Express 16
ORM框架:SQLSugar
分析
- 日志中打印了sql语句,直接复制sql语句到SSMS中,同样提示列名无效,可以确定列名有问题;
- 公司的产品框架基于SQLSugar做了一层封装,通过反编译软件查看代码,使用SQLSugar字典方式更新数据库,如下:
Dictionary<string, object> dt = new Dictionary<string, object>();
dt.Add("IsDeleted", true);
dt.Add("CreateTime", DateTime.Now);
dt.Add("Name", this.currentUserName);
result = db.Updateable(dt).AS(this.TableName).Where(" ID = '" + key + "'", null).ExecuteCommand();
数据库中列名全部为大写,因此直接反编译修改模块,改成大写,替换后再次测试,问题解决:
dt.Add("ISDELETED", true);
dt.Add("CREATETIME", DateTime.Now);
dt.Add("NAME", this.currentUserName);
- 但使用相同版本产品框架的其它项目,测试没有该问题,因此怀疑数据库配置有差异:
如图,报错的项目数据库排序规则为CS,未报错的项目排序规则为CI。CI/CS指 是否区分大小写,CI不区分,CS区分。
解决
方法一:注意数据库的排序规则配置,使用CI;
方法二:调整框架代码,区分大小写,与数据库列名严格一致;
转载请注明出处,欢迎交流。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器