사내 웹 서비스를 사용하여 문자열 주소를 위도/경도 문자열로 변환하는 간단한 메서드 DLL을 만들었습니다. 코드는 간단히 다음과 같습니다.CLR SQL 함수 실행 문제
public class GeoCodeLib
{
[SqlFunction(IsDeterministic=false)]
public SqlString GetLatLon(SqlString addr)
{
Geo.GeoCode gc = new Geo.GeoCode();
Geo.Location loc = gc.GetLocation(addr.Value);
return new SqlString(string.Format("{0:N6}, {1:N6}", loc.LatLon.Latitude, loc.LatLon.Longitude));
}
}
.NET Framework 2.0을 대상으로했습니다. 우리는 SQL Server 2008 R2를 사용하고 있습니다. 어셈블리가 데이터베이스에 추가되었습니다 (어셈블리는 GeoCodeSqlLib.dll이라고 함). 이에 대한 사용 권한을 설정하지 않았습니다.
나는 그것을 부를 수 없다. 나는 시도했다 : 나는 시도했다 Cannot find either column "GeoCodeSqlLib" or the user-defined function or aggregate "GeoCodeSqlLib.GeoCodeLib.GetLatLon", or the name is ambiguous.
나에게 메시지를 제공
select GeoCodeSqlLib.GeoCodeLib.GetLatLon('12143 Thompson Dr. Fayetteville, AR 72704')
: 나에게 메시지를 제공
CREATE FUNCTION GetLatLon(@amount varchar(max)) RETURNS varchar(max)
AS EXTERNAL NAME GeoCodeSqlLib.GeoCodeLib.GetLatLon
, Could not find Type 'GeoCodeLib' in assembly 'GeoCodeSqlLib'.
을 나는 분명 해요 무언가를 놓침. 설명서의 샘플은 모두 기본적으로 빠졌지 만 필자는 설명서에서 찾을 수 없었습니다. 모든 도움
업데이트
감사합니다. 몇 가지 :
- 웹 서비스 호출을하려면 외부 액세스 권한이 있어야합니다. SQL Server 프로젝트를 만들 필요가 있다는 것을 알지 못했습니다. 난 그냥 정규 C# 클래스 라이브러리를하고 있었다.
- 그래서 SQL Server 프로젝트를 만들었습니다. SQL Server 프로젝트는 웹 서비스 참조를 지원하지 않습니다. 원래 DLL에 대한 참조를 추가하려고 시도 했으므로 새 SQL Server 프로젝트 DLL이 원본 DLL (원래 질문의 코드)에 대한 프록시 역할을합니다.
- 그러나 이것은
Assembly 'geocodesqllib, version ...' was not found in the SQL catalog.
입니다. 그러나 외부 액세스가 필요하기 때문에 카탈로그에 추가 할 수 없습니다. SQL Server 이외 프로젝트에서 수행 할 수없는 액세스 (해당 ).
정말 이걸 쉽게하고 싶지 않습니까?
아래에있는 내 의견으로 당 2
업데이트, 마지막 문제는 설정 파일로 나타납니다. 설정을 찾지 못했습니다. 서버의 이름을 보호하기 위해 변경되었습니다 무고한 :
<applicationSettings>
<GeoCodeSqlLib.Properties.Settings>
<setting name="GeoCodeSqlLib_ourserver_GeoCode" serializeAs="String">
<value>http://ourserver/GeoCode.svc</value>
</setting>
</GeoCodeSqlLib.Properties.Settings>
</applicationSettings>
내가 오류는 다음과 같습니다
System.Configuration.SettingsPropertyNotFoundException: The settings property 'GeoCodeSqlLib_ourserver_GeoCode' was not found.
방법은'static'해야합니다. –
의견과 관련하여 귀하가 옳다. 나는 그 오류 메시지의 일부를 놓쳤다. 내 대답을 삭제합니다. 감사! – JuanR