Я создал простую DLL-форму 1, чтобы преобразовать строковый адрес в строку Lat/Lon, используя внутреннюю веб-службу. Код выглядит следующим образом:Неисправность Выполнение функции 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). Мы не установили никаких прав на него.
Я не могу назвать это. Я пробовал:
select GeoCodeSqlLib.GeoCodeLib.GetLatLon('12143 Thompson Dr. Fayetteville, AR 72704')
Это дает мне сообщение, Cannot find either column "GeoCodeSqlLib" or the user-defined function or aggregate "GeoCodeSqlLib.GeoCodeLib.GetLatLon", or the name is ambiguous.
Я пробовал:
CREATE FUNCTION GetLatLon(@amount varchar(max)) RETURNS varchar(max)
AS EXTERNAL NAME GeoCodeSqlLib.GeoCodeLib.GetLatLon
Это дает мне сообщение, Could not find Type 'GeoCodeLib' in assembly 'GeoCodeSqlLib'.
Я ясно отсутствует что-то. Образцы документации являются действительно основными и независимо от того, что мне не хватает, я просто не смог найти его в документации.
Update
Спасибо за помощь. Итак, несколько вещей:
- Мне нужно сделать внешний доступ, чтобы получить возможность совершать вызов веб-службы .. Я не понимал, что мне нужно создать проект SQL Server. Я просто делал обычную библиотеку классов C#.
- Итак, я создал проект SQL Server. Проект SQL Server не поддерживает ссылки на веб-службы. Я попытался добавить ссылку на свою оригинальную DLL, поэтому новая DLL проекта SQL Server выступает в качестве прокси-сервера для исходной DLL (код в моем исходном вопросе).
- Это, однако, дает мне:
Assembly 'geocodesqllib, version ...' was not found in the SQL catalog.
Но я не могу добавить его в каталог, потому что ему нужен Внешний доступ, который я не могу сделать из проекта, отличного от SQL Server (это Я знаю).
Они действительно не хотят делать это легко, не так ли?
Update 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