我在编写内部 API 时遇到了以下错误。我想要做的是以下列方式读取 SqlGeography
值 (SQL Server 2012):
field: public SqlGeography XY { get; set; }
object dbValue = reader["xy"];
PropertyInfo info = type.GetProperty(columnName:"xy");
info.SetValue(entity, dbValue);
虽然这看起来可能很奇怪,但我以这种方式阅读的原因是因为它是我编写的包装器的一部分,我们用它来加速 sql 读写。它采用匿名对象并根据属性名称或属性名称将所有 sql 值读入其中。
这对除 SqlGeography
以外的一切都适用。我做了一个类型比较,但它也失败了,因为它很老套,我什至无法检查该列是否属于 SqlGeography
类型,因为它总是无法与 Microsoft 进行比较.SqlServer.Types.SqlGeography
.
初始异常如下:
Object of type 'Microsoft.SqlServer.Types.SqlGeography' cannot be converted to t ype 'Microsoft.SqlServer.Types.SqlGeography'.
如果有任何不清楚的地方,请开火,我会尽力详细说明。
谢谢!
- 接受的解决方案: 安装包 Microsoft.SqlServer.Types -版本 10.50.1600.1
最佳答案
您的类型程序集可能存在版本不匹配。这是版本 10 和 11 之间的一个已知问题。不幸的是,错误消息不包含版本信息,这就是为什么它看起来像胡说八道!
要绕过它,您可以反序列化类型的二进制表示,即像这样的东西(如果您的地理列是结果集中的第一个):
var geo = SqlGeography.Deserialize(reader.GetSqlBytes(0));
还有其他解决方法,包括为程序集执行绑定(bind)重定向。
关于c# - SqlGeography 类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25323301/