2013-03-01 1 views
7

У меня есть службы WCF REST, который содержит следующий кодDbGeography.PointFromText 24141: Номер ожидается на позиции

var geo = DbGeography.PointFromText(string.Format("POINT({0} {1})", longitude, latitude), DbGeography.DefaultCoordinateSystemId); 

тест блока работает отлично, но когда я называю этот код от клиента или HTTP debuder предоставления какой-либо значения широты и долготы нули кроме мазута, он терпит неудачу с исключением:

"24141: A number is expected at position X of the input. The input has ,XXXXXX." 
    at Microsoft.SqlServer.Types.WellKnownTextReader.RecognizeDouble() 
    at Microsoft.SqlServer.Types.WellKnownTextReader.ParsePointText(Boolean parseParentheses) 
    at Microsoft.SqlServer.Types.WellKnownTextReader.ParseTaggedText(OpenGisType type) 
    at Microsoft.SqlServer.Types.WellKnownTextReader.Read(OpenGisType type, Int32 srid) 
    at Microsoft.SqlServer.Types.SqlGeography.ParseText(OpenGisType type, SqlChars taggedText, Int32 srid) 
    at Microsoft.SqlServer.Types.SqlGeography.GeographyFromText(OpenGisType type, SqlChars taggedText, Int32 srid) 
    at Microsoft.SqlServer.Types.SqlGeography.STPointFromText(SqlChars pointTaggedText, Int32 srid) 

широта и долгота, например
широчайшие: +37,58336895 долго: -122,40549454
Lat: +37,38931302 долго: -122,16207476

Я использовал Microsoft.SqlServer.Types ссылки из каталога установки SQLServer и SqlGeography.Point для работы с данными о spartial стороне кода. Теперь я хочу использовать функции EF 5 напрямую, не используя ссылку на Microsoft.SqlServer.Types. Он не справляется с этой ссылкой и без нее.

Любая идея, что не так?

.NET 4.5 установлен, версия SQL Server Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (Intel X86) Sep 22 2011 00:28:06 Авторское право (c) 1988-2008 Microsoft Corporation Standard Edition для Windows NT 6.1 (Build 7601: Service Pack 1)

+3

Значения, предоставленные вашим клиентом, являются неправильными двойными значениями. Обратите внимание, что это могут быть настройки языкового стандарта. вы пишете double с десятичной комой, а SqlTypes - десятичной точкой. – Pawel

+0

Спасибо, Павелл, это действительно помогло. –

+0

Имела ту же проблему, и это были настройки локали на втором компьютере (тот, который вызывал проблемы). Спасибо за головокружение! – Rich

ответ

11

Вы должны преобразовать координаты с помощью инвариантаCulture перед конкатенацией.

String lon = longitude.ToString(CultureInfo.InvariantCulture); 
    String lat = latitude.ToString(CultureInfo.InvariantCulture); 
    var geo = DbGeography.PointFromText(string.Format("POINT({0} {1})", lon, lat), DbGeography.DefaultCoordinateSystemId);