最近在写一个.net core 2.1项目时。用ADO.NET 连接数据库在对某张表进行查询时发生DataReader.GetFieldType(46) returned null.(第46个字段(从0开始计)在尝试获取类型的时候返回了null空值)报错。(别问我为什么用ADO.NET连数据库。这项目用EFCore连第一个数据库,ADO.NET连第二个数据库。也别问我为什么要这样做,我也不知道,我拿来改的)
经调试发现数据库表里第46个字段类型为:geography ---下图为geography 字段说明
----------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------
这个数据类型导致了SqlDataAdapter 在Fill DataTable的时候报错。因为datatable没这个类型所有在获取FieldType时报错。
有大佬建议我先在不获取FieldType的情况下先fill一次看看,然后尝试读读对应的dataitem里面是什么内容,再去决定转化的方法。
我觉得麻烦,所以决定不用SqlDataAdapter模式,改为SqlDataReader 解决类型报错问题。
另外geography数据类型在.NET Framework下对应类型为DbGeography。在 System.Data.Entity.Spatial命名空间下。应该是.NET Framework4.5之后才有支持的
而.net core无DbGeography类型。不知道是未支持还是微软更换了类型名。总之在.net core官方文档里未找到DbGeography类型
另外.net core下如果要修改这个字段值该如何写?这个因为项目没有要求对这个字段进行修改新增,所以不得而知,有空研究下。