C# 从Azure函数中的Azure SQL访问几何体列时出错

C# 从Azure函数中的Azure SQL访问几何体列时出错,c#,azure,azure-sql-database,azure-functions,sqlgeography,C#,Azure,Azure Sql Database,Azure Functions,Sqlgeography,我有一个Azure函数,可以访问Azure SQL数据库。数据库中的第42列是地理数据类型(这就是问题所在) 以下是我正在运行的代码: // var datatable = DataTable(); // Filled 'datatable' from a database query string json = Newtonsoft.Json.JsonConvert.SerializeObject(dataTable, Newtonsoft.Json.Formatting.Indented)

我有一个Azure函数,可以访问Azure SQL数据库。数据库中的第42列是地理数据类型(这就是问题所在)

以下是我正在运行的代码:

// var datatable = DataTable();
// Filled 'datatable' from a database query

string json = Newtonsoft.Json.JsonConvert.SerializeObject(dataTable, Newtonsoft.Json.Formatting.Indented);
return new HttpResponseMessage(HttpStatusCode.OK) 
{
    Content = new StringContent(json, Encoding.UTF8, "application/json")
}; 
我收到这个错误信息:

执行函数时出现异常:Functions.GetRepeaterDetails。 Microsoft.Azure.WebJobs.Script:发生一个或多个错误。 System.Data:DataReader.GetFieldType(42)返回null

我花了几个小时的时间搜索和尝试其他人声称有效的方法,但没有人能解决我的问题

我是在:

请注意,您的示例将起作用,但不起作用的是web 从SQL Azure检索几何体的应用程序,因为SQL Azure 当前正在兼容级别上运行Denali(SQL Server 2012) 100; 因此,它将返回10.0空间类型的实例和 尝试将web角色强制转换为11.0时,web角色将引发异常

我尝试过的一些事情:

  • 将Microsoft.SqlServer.Types v14.0.314.76添加到project.json(还尝试了其他几个版本)
  • 将HashFoo.SqlServer.SpatialTypes v10.0.0添加到project.json
  • 将Azure SQL Server兼容性级别更改为110

  • 尽管我可以看到服务器正在通过Nuget安装适当的引用,但错误消息保持不变。

    我不知道要加载哪个程序集才能正常工作,但您可以通过使用查询中的函数将该列转换为WKT来回避此问题

    因为您正在将结果格式化为JSON,所以这可能正是您想要的

    乙二醇


    您也可以只使用

    我不知道要加载哪个程序集才能使其正常工作,但您可以通过在查询中使用.ToString()函数将该列转换为WKT来回避这个问题。@DavidBrowne Microsoft您知道,这不是一个坏主意。请将其作为答案提交。(这可能是我唯一得到的答案。)不幸的是,“FOR JSON无法序列化CLR对象。"是的,您仍然需要将列转换为WKT,但不需要在客户端将表格结果转换为JSON。@Joshua您可以接受David的答案,因为这似乎是唯一有效的方法。函数主机引用GAC中的
    Microsoft.SqlServer.Types
    ,但它只是无法在
    Fill
    方法中使用它。我设法使它正常工作k在控制台应用程序中,但Json.Net不支持serialize
    SqlGeography
    value,必须定义自定义转换器。因此,遵循David的建议可能是最好的选择。@JerryLiu,是的,我只是让它打开几天,看看是否有其他人有其他想法。但是,唉..那“几天”已经过期,他的解决方案成功了。
    select ...., geo_location.ToString() geo_location, . . .
    from some_table