Хранимая процедура для выполнения SOAP запросов. SQL Server.

CREATE PROCEDURE [dbo].[sp_soap_request]
	@url nvarchar(max), -- Адрес сервера
	@result varchar(max) OUTPUT, -- Ответ
	@method nvarchar(max) = 'POST', -- Метод передачи
	@soap_action varchar(max) = NULL, -- Действие
	@request varchar(max) = NULL, -- Запрос
	@user_name varchar(max) = NULL, -- Имя пользователя
	@password varchar(max) = NULL -- Пароль
AS
BEGIN	
	SET NOCOUNT ON;

    DECLARE
		@ole_obj int, -- Ссылка на OLE объект
		@err int, -- Код ошибки
		@err_str varchar(max), -- Текст ошибки
		@err_src nvarchar(max), -- Источник ошибки
		@err_desc nvarchar(max), -- Описание ошибки
		@http_status int, -- Код ответа сервера
		@err_id int, -- Код ошибки процедуры sp_OAGetErrorInfo
		@ResolveTimeOut int = 120 * 1000, -- Время ожидания поиска хоста
		@ConnectTimeOut int = 10 * 1000, -- Время ожидания соединения
		@SendTimeOut int = 120 * 1000, -- Время ожидания отправки
		@ReceiveTimeOut int = 240 * 1000 -- Время ожидания ответа
	
	EXEC @err = sys.sp_OACreate 'MSXML2.ServerXMLHTTP', @ole_obj OUTPUT
	IF @err = 0 BEGIN	
		EXEC @err = sys.sp_OAMethod @ole_obj, 'open',NULL,@method,@url,'FALSE',@user_name,@password
			IF @err <> 0 BEGIN SELECT @err_str = 'Ошибка при выполнении метода "OPEN".' GOTO GETERROR END
	
			EXEC @err = sys.sp_OAMethod @ole_obj ,'setTimeouts'	,NULL , @ResolveTimeOut, @ConnectTimeOut, @SendTimeOut, @ReceiveTimeOut
			IF @err <> 0 BEGIN SELECT @err_str = 'Ошибка при выполнении метода "setTimeouts".' GOTO GETERROR END

			EXEC @err = sys.sp_OAMethod @ole_obj ,'setRequestHeader'	,NULL ,'Content-Type','text/xml; charset=utf-8'	
			IF @err <> 0 BEGIN SELECT @err_str = 'Ошибка при выполнении метода "setRequestHeader" (Content-Type).' GOTO GETERROR END
	
			IF @soap_action IS NOT NULL BEGIN
				EXEC @err = sys.sp_OAMethod @ole_obj ,'setRequestHeader'	,NULL ,'SOAPAction', @soap_action
				IF @err <> 0 BEGIN SELECT @err_str = 'Ошибка при выполнении метода "setRequestHeader" (SOAPAction).' GOTO GETERROR END
			END

			EXEC @err = sys.sp_OAMethod @ole_obj,'send',NULL,@request
			IF @err <> 0 BEGIN SELECT @err_str = 'Ошбика при выполнении метода "SEND".' GOTO GETERROR END
	
			EXEC @err = sys.sp_OAGetProperty @ole_obj ,'status' ,@http_status OUT
			
			IF @err <> 0 BEGIN SELECT @err_str = 'Ошбика при получении HTTP статуса ответа: ' + CONVERT(varchar(max), @http_status) GOTO GETERROR END
			IF ISNULL(@http_status, -1) not in (200,500) BEGIN SELECT @err=-1, @err_str = 'Неверный статус HTTP ответа: ' + CONVERT(varchar(max), @http_status) GOTO GETERROR END		
		
			DECLARE @response TABLE (response varchar(max))
			INSERT INTO @response
			EXEC @err = sys.sp_OAGetProperty @ole_obj ,'responseText'
			
			IF @err <> 0 BEGIN SELECT @err_str = 'Ошбика при получении HTTP ответа.' GOTO GETERROR END
			SELECT @result = response FROM @response
			IF @http_status = 500 BEGIN SELECT @err=-1, @err_str = 'Ошибка сервера HTTP 500: '+@result GOTO GETERROR END

			GOTO DESTROYOLE
			GETERROR:BEGIN
				EXEC @err_id = sys.sp_OAGetErrorInfo @ole_obj, @err_src OUTPUT, @err_desc OUTPUT
				IF @err_id = 0
					SELECT @err_str += ' Источник: ' + ISNULL(@err_src,'NULL') + ' Описание: ' + ISNULL(@err_desc,'NULL') + ' Код ошибки: ' + CONVERT(varchar(max), @err)
				ELSE
					SELECT @err_str += ' Процедура sp_OAGetErrorInfo вернула ошибку: ' + CONVERT(varchar(max), @err_id)
			END
			DESTROYOLE:EXEC sys.sp_OADestroy @ole_obj
			IF @err <> 0 RAISERROR(@err_str, 16, -1)
	END ELSE RAISERROR('Не удалось создать OLE объект "MSXML2.ServerXMLHTTP"', 16,-1)
	RETURN @err
END

Как удалить все хранимые процедуры

USE BASE_NAME
DECLARE @sc varchar(max), @sp varchar(max)

DECLARE cr CURSOR FOR
SELECT
ROUTINE_SCHEMA,
SPECIFIC_NAME 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_TYPE = 'PROCEDURE'
OPEN cr
FETCH NEXT FROM cr INTO @sc, @sp
WHILE @@FETCH_STATUS = 0 BEGIN
	EXECUTE('DROP PROCEDURE ' + @sc + '.' + @sp)
	FETCH NEXT FROM cr INTO @sc, @sp
END
CLOSE cr
DEALLOCATE cr

Регистрируем горячие клавиши для своего приложения в системе

Здравствуйте уважаемые коллеги!

В данном примере показано как можно зарегистрировать горячие клавиши для вашего приложения в системе, которые будут срабатывать даже если окно вашей программы не активно или скрыто.

Далее

Пишем программу на Delphi выполняющую команду Ping по указанному адресу.

Здравствуйте уважаемые коллеги!

В данной статье напишем программку, которая выполняет команду Ping, при помощи стандартной утилиты Windows Ping.exe

1
Далее

Создание и использование динамических библиотек (DLL) в Delphi.

Здравствуйте уважаемые коллеги!

В данной статье я постараюсь ответить на вопросы: Что такое DLL? Для чего она нужна? И как создавать и использовать DLL при помощи Delphi.

Далее

Простой способ подключения ресурсов *.res в Delphi.

Здравствуйте уважаемые коллеги!

В сети присутствует большое количество информации о том, как подключить ресурсы к своему проекту в Delphi. И как правило это старый «дедовский» метод через создание *.rc файла с последующей компиляцией его через командную строку. Но начиная с версии 2009 (и далее) в Delphi появилась возможность делать это намного проще.

Далее

WinInet в Delphi. Начало. HTTP запрос.

Здравствуйте уважаемые коллеги!

Библиотека WinInet, или Win32 Internet Extensions, предоставляет набор API функций для работы с протоколами HTTP и FTP. В данном примере я покажу как используя данную библиотеку получить исходный HTML код страницы.

Далее

Обмен данными с MS Excel в Delphi при помощи OLE.

Обмен данными с MS Excel в Delphi при помощи OLE.

Здравствуйте уважаемые коллеги!

Все мы рано или поздно сталкиваемся с задачами обмена данных с приложениями пакета MS Office. Одно из них — это MS Excel. И именно о взаимодействии с данным продуктом MS Office пойдет речь в данной статье.

Далее

ListBox с возможностью переносить на него файлы методом DragAndDrop.

Здравствуйте уважаемые коллеги!

В данной статье я покажу как сделать компонент ListBox, на который можно будет перетаскивать файлы из проводника методом DragAndDrop.

Далее