C# 从Azure函数中的Azure SQL访问几何体列时出错
我有一个Azure函数,可以访问Azure SQL数据库。数据库中的第42列是地理数据类型(这就是问题所在) 以下是我正在运行的代码: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)
// 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角色将引发异常
我尝试过的一些事情:
尽管我可以看到服务器正在通过Nuget安装适当的引用,但错误消息保持不变。我不知道要加载哪个程序集才能正常工作,但您可以通过使用查询中的函数将该列转换为WKT来回避此问题 因为您正在将结果格式化为JSON,所以这可能正是您想要的 乙二醇
您也可以只使用我不知道要加载哪个程序集才能使其正常工作,但您可以通过在查询中使用.ToString()函数将该列转换为WKT来回避这个问题。@DavidBrowne Microsoft您知道,这不是一个坏主意。请将其作为答案提交。(这可能是我唯一得到的答案。)不幸的是,“FOR JSON无法序列化CLR对象。"是的,您仍然需要将列转换为WKT,但不需要在客户端将表格结果转换为JSON。@Joshua您可以接受David的答案,因为这似乎是唯一有效的方法。函数主机引用GAC中的
Microsoft.SqlServer.Types
,但它只是无法在Fill
方法中使用它。我设法使它正常工作k在控制台应用程序中,但Json.Net不支持serializeSqlGeography
value,必须定义自定义转换器。因此,遵循David的建议可能是最好的选择。@JerryLiu,是的,我只是让它打开几天,看看是否有其他人有其他想法。但是,唉..那“几天”已经过期,他的解决方案成功了。
select ...., geo_location.ToString() geo_location, . . .
from some_table