2014-07-22 3 views
2

Visual Studio 2013과 SQL Server 2012를 사용하여 C#에서 개발 중입니다. T-SQL을 사용하여 지리 열에 폴리곤을 저장할 수 있었으며 코드에서 SqlGeography 클래스를 사용하여 데이터를 검색하지 않았습니다. DataReader에서 SqlGeography 형식을 검색 할 때 InvalidCastException을 해결하는 방법은 무엇입니까?

내가하려고하면 :

가 'System.InvalidCastException'형식의 처리되지 않은 예외가 GeoLib.dll에 을 발생

SqlGeography polyB = (SqlGeography)dr["extent"]; // stored in OGC Well Known Binary format 

내가 메시지를 수신하고 데이터베이스에서 다각형을 검색 할 수

추가 정보 : [A] Microsoft.SqlServer.Types.SqlGeography [B] Microsoft.SqlServer.Types.SqlGeography로 캐스팅 할 수 없습니다. 형식 A 'C : \ Windows \ assembly \ GAC_MSIL \ Microsoft.SqlServer'의 컨텍스트에서 'Microsoft.SqlServer.Types, Version = 10.0.0.0, 문화권 = 중립, PublicKeyToken = 89845dcd8080cc91' .Types \ 10.0.0.0____89845dcd8080cc91 \ Microsoft.SqlServer.Types.dll '. \ WINDOWS \ 조립 \ GAC_MSIL \

B 형 위치 'C에서 상황에 맞는 '기본 '에서' 문화 =, PublicKeyToken = 89845dcd8080cc91 중립, Microsoft.SqlServer.Types 버전 = 11.0.0.0을 '에서 유래 Microsoft.SqlServer.Types \ 11.0.0.0__89845dcd8080cc91 \ Microsoft.SqlServer.Types.dll '입니다.

SQL Server와 Visual Studio간에 버전이 서로 다른 버전 번호로 표시되는 것으로 의심됩니다. 아무도 이것에 빠지지 않았 니? SQL Server 2014를 설치해야합니까? 모든 아이디어를 높이 평가합니다!

+0

프로젝트에 Microsoft.SqlServer.Types의 어떤 버전이 있습니까? – DaveShaw

+0

프로젝트에서 버전 11을 사용 중입니다. 10을 찾고 사용하려고합니다. –

+0

Dave - 그게 다야! 나는 "나무 숲"을 놓치고 있었다. 감사! –

답변

1

밝혀졌습니다. SQL Server 2012에서 사용해야하는 버전 10 대신 버전 11 (의심되는 Visual Studio 2013과 함께 사용)을 사용하고있었습니다. 버전 10 .dll로 프로젝트 참조를 변경하면 모든 것이 잘 동작했습니다.

5

자신의 대답이 자신의 문제를 명확하게 분류하고 있지만, 가지고있는 것을 수행함으로써 SQL 2012 이후 버전에서만 기하학 및 지리에서 사용할 수있는 몇 가지 방법에 액세스하지 못하게되었습니다.

는 다음 링크, Breaking Changes to Database Engine Features in SQL Server 2012

당신은 3 분의 1 아래로 페이지에 대한 관련 정보를 찾을 수 있습니다 볼이 문제를 해결하는 더 좋은 방법을 설명하고, 하위 머리 "SQL CLR 데이터 형식 (기하, 지리 , hierarchyid) "과 같이 표시됩니다. 필자가 선택한 방법은 app.config의 어셈블리를 리디렉션하는 것이었지만 원하는 경우/원하는 경우 다른 방법 중 하나를 사용할 수 있습니다.

SQL Server 2014에는 동일한 솔루션이 필요하지만 Microsoft.SqlServer.Types 어셈블리의 버전 12를 지정하는 것과 아직 호환되지 않으며 "SQL Server 2014"를 Type System Version 매개 변수로 지정할 수 없습니다. 연결 문자열 - 사용 2012.

서면 작성 시점 기준.

늦은 답변에 사과드립니다. 도움이 되었기를 바랍니다.

+1

MSDN 기사에서 제공된 연결 문자열 해결 방법이 효과적이었습니다. '유형 시스템 버전 = SQL Server 2012;'포함 공간 db 연결 문자열에. – kryptonkal

+0

구성 파일은 SQL Server 2016에서도 런타임에 종속 어셈블리 값이 으로 변경됩니다. ' – Fwd079