c# - SqlGeography 类型不匹配

标签 c# sql .net sql-server-2012

我在编写内部 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)重定向。

更多信息在这里:https://connect.microsoft.com/SQLServer/feedback/details/685654/invalidcastexception-retrieving-sqlgeography-column-in-ado-net-data-reader

关于c# - SqlGeography 类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25323301/

相关文章:

c# - 如何在 C# .Net 4.6 WPF 应用程序中隐藏 ConnectionString

c# - 何时使用 JsonResult 而不是 ActionResult

c# - 通过安装程序设置模拟属性会导致 'Expression is not a method invocation'

c# - 无需编辑大量配置文件的版本控制软件

MySql 查询统计音乐排行榜中的歌曲投票

c# - 实现IQueryable包装器来转换结果对象

.net - Visual Studio : Is there a way to collapse all items of Solution Explorer?

c# - 定义接口(interface)时 <> 是什么意思?

sql - 按周计算首次订阅者

mysql 计数 group_concat 中的项目