SqlDataReader.GetValue 对几何列不成功

Posted

技术标签:

【中文标题】SqlDataReader.GetValue 对几何列不成功【英文标题】:SqlDataReader.GetValue not successful for geometry columns 【发布时间】:2021-08-14 09:51:59 【问题描述】:

当我在使用几何类型的表上有一个 SqlDataReader 时,reader.GetFieldType(index) 返回 null 并且reader.GetValue(index) 导致

System.IO.FileLoadException: '无法加载文件或程序集 'Microsoft.SqlServer.Types,版本=10.0.0.0,文化=中性, PublicKeyToken=89845dcd8080cc91' 或其依赖项之一。这 定位程序集的清单定义与程序集不匹配 参考。 (HRESULT 异常:0x80131040)'

我尝试添加 nuget 包 Microsoft.SqlServer.Types v14.0.1016.290,但这并不能解决问题。

【问题讨论】:

【参考方案1】:

我还没有使用过geometry 类型,只是阅读文档。 geometry 表示坐标系中的一个点,它以二进制形式存储。所以试试这个:

SqlGeometry geometry = new SqlGeometry();
geometry.Read(new BinaryReader(reader.GetSqlBytes(index).Stream));

【讨论】:

有趣。我怎么知道它是geometry的类型? @AndersLindén:根本没有,因为文档根本没有提到它。您必须从 nuget 下载并安装 Microsoft.SqlServer.Types 包。

以上是关于SqlDataReader.GetValue 对几何列不成功的主要内容,如果未能解决你的问题,请参考以下文章

如何在postgres中对几个月的日期记录分组后填补时间间隔

对几次通宵加班发版的复盘和思考

对几种常见设计模式的理解

对几种数据库的认识

对几个Xaml控件的一些看法

对几种获取字符串长度的方法进行性能比较