Ben*_*ius 2 .net c# sql 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);
Run Code Online (Sandbox Code Playgroud)
虽然这可能看起来很奇怪,但我这样阅读的原因是因为它是我编写的Wrapper的一部分,我们用它来加速sql的读写.它需要一个匿名对象,并根据属性名称或属性名称将所有sql值读入其中.
这适用于除了之外的一切SqlGeography.我做了一个类型比较,它也失败了,因为它是hacky,因为它甚至不能检查列是否类型,SqlGeography因为它始终无法比较Microsoft.SqlServer.Types.SqlGeography.
最初的例外情况如下:
"Microsoft.SqlServer.Types.SqlGeography"类型的对象无法转换为"Microsoft.SqlServer.Types.SqlGeography".
如果有任何不清楚的地方,请开火,我会尽力详细说明.
谢谢!
您可能在类型程序集上存在版本不匹配.这是版本10和11之间的已知问题.不幸的是,错误消息不包含版本信息,这就是为什么它看起来像废话!
为了解决这个问题,您可以反序列化类型的二进制表示,即类似这样的事情(如果您的地理列是结果集中的第一个):
var geo = SqlGeography.Deserialize(reader.GetSqlBytes(0));
Run Code Online (Sandbox Code Playgroud)
还有其他解决方法,包括为程序集执行绑定重定向.
更多信息:https://connect.microsoft.com/SQLServer/feedback/details/685654/invalidcastexception-retrieving-sqlgeography-column-in-ado-net-data-reader
| 归档时间: |
|
| 查看次数: |
1571 次 |
| 最近记录: |