二开WebApi返回DataSet对象,当其中的DataTable的Rows为空时,2023-11补丁后返回空DataTable的json数据不一样。

【问题描述】
二开WebApi接口,并返回DataSet对象,当其中的DataTable的Rows为空时,2023-11补丁后返回的json数据不一样了。
例如:select fname from t_xxx_table where fname='test' , 数据库中不存在test数据时返回一个包含空数据的DataTalbe的DataSet时。历史版本返回了:{"Table": [] },2023-11版本后返回了: {"Table":[{"fname":"","ColumnTypeFullName":"System.String","TableRowsIsEmpty":true}]},携带了结构和数据空标识。
【场景介绍】
业务场景及原因分析:升级2023-11补丁版本后,增强了数据安全与准确性
问题出现版本:PT-151005 [8.2.0.20231109] 发布时间:2023/11/9 构建号:8.2.775.7
问题出现端:WebApi
原因分析:
当查询select fname from t_xxx_table where fname='test' 时。
老版本直接返回空包{"Table":[]},把查询结构直接丢失了,显然是不正确的,导致整个查询结构丢失了。
新版本修复了该问题,当查询的DataTable中数据为空时,标注该DataTable中的TableRowsIsEmpty数据为空,同时会返回查询的数据结构,并在每个字段后面紧跟ColumnTypeFullName属性描述前面的字段数据类型,用于JsonConver时准确恢复字段类型,确保接收端反序列化时与服务端DataTable的数据结构一致。
当查询数据为空时:{"Table":[{"fname":"","ColumnTypeFullName":"System.String","TableRowsIsEmpty":true}]} 。
当查询数据不为空时:{"Table":[{"fname":"demo","ColumnTypeFullName":"System.String"}]}。
【解决方案】
出现这样的提示是由于在查询不到数据时返回的DataTable保持了查询结构,而不是
二开WebApi返回DataSet对象,当其中的DataTable的Rows为空时,2023-11补丁后返回空DataTable的json数据不一样。
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



