您的位置:首页 > 文旅 > 美景 > 在线客服系统定制_ccd设计公司官网_网站分析培训班_网络营销推广方式包括哪几种

在线客服系统定制_ccd设计公司官网_网站分析培训班_网络营销推广方式包括哪几种

2025/5/14 0:19:43 来源:https://blog.csdn.net/gc_2299/article/details/143418448  浏览:    关键词:在线客服系统定制_ccd设计公司官网_网站分析培训班_网络营销推广方式包括哪几种
在线客服系统定制_ccd设计公司官网_网站分析培训班_网络营销推广方式包括哪几种

  使用SqlSugar连接达梦数据库,联查两张表的数据遇到的奇怪问题:同一套代码,在一个环境中可以正常查询并返回数据,但在另一环境中运行则查不到数据。在个人电脑上测试时也能正确运行,搞不清楚是怎么回事,特此记录测试过程。
  在达梦数据库中创建两张表,CLASS表记录班级数据,STUDENT记录班级学生数据,下面截图是两张表中的测试数据。
在这里插入图片描述  代码功能是查找所有有学生的班级信息(本文仅是示例,实际表数据比较复杂,只能单向查),查询逻辑比较简单,条件中的(a.INDEX < 4)仅是为了示意其它条件。

var results = db.Queryable<CLASS, STUDENT>((a, b) => new JoinQueryInfos(JoinType.Left, a.ID == b.CLASSID)).Where((a, b) => (a.INDEX < 4) && !string.IsNullOrEmpty(b.ID)).Select((a, b) => new QueryResult{ClassName = a.NAME,StudentName = b.NAME}).ToList();

  上面的代码在测试环境1运行正常,但是到了测试环境2中却查不出来数据,两个环境中的数据库版本、数据库表都相同,只是数据不同。
  上述查询代码生成的Sql语句如下,表面上看不出来什么问题,将其在达梦管理工具中逐个排除查询条件,最终发现是NOT( “B”.“ID” IS NULL OR “B”.“ID”=‘’)这个条件出的问题,也就是!string.IsNullOrEmpty(b.ID)代码转换的Sql语句,具体而言是其中的OR “B”.“ID”=‘’,如果仅是NOT( “B”.“ID” IS NULL)也能正常返回数据,加上上面的返回就是空值。

SELECT  \"A\".\"NAME\" AS \"CLASSNAME\" , \"B\".\"NAME\" AS \"STUDENTNAME\"  
FROM \"CLASS\" \"A\" Left JOIN \"STUDENT\" \"B\" ON ( \"A\".\"ID\" = \"B\".\"CLASSID\" )  
WHERE (( \"A\".\"INDEX\" < 4 ) AND NOT( \"B\".\"ID\" IS NULL   OR \"B\".\"ID\"=''))

  最终也没有找到原因,只能将查询代码修改为下面的形式:

var results = db.Queryable<CLASS, STUDENT>((a, b) => new JoinQueryInfos(JoinType.Left, a.ID == b.CLASSID)).Where((a, b) => (a.INDEX < 4) && b.ID.StartsWith("STUDENT")).Select((a, b) => new QueryResult{ClassName = a.NAME,StudentName = b.NAME}).ToList();

参考文献:
[1]https://www.donet5.com/home/Doc?typeId=1180

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com