Как выполнить хранимую процедуру (с использованием синтаксиса RPC) и обработать коды возврата и выходные параметры (OLE DB)
Хранимые процедуры SQL Server могут иметь целочисленные коды возврата и выходные параметры. Коды возврата и выходные параметры пересылаются с сервера в последнем пакете данных, следовательно, остаются недоступными приложению, пока набор строк не будет полностью освобожден. Если команда возвращает множественные результаты, то данные выходных параметров будут доступны, когда метод IMultipleResults::GetResult возвратит значение DB_S_NORESULT или полностью освободится интерфейс IMultipleResults (в зависимости от того, какое из этих событий произойдет раньше).
Обработка кодов возврата и выходных параметров
Сконструируйте инструкцию SQL, использующую управляющую последовательность удаленного вызова процедуры.
Вызовите метод ICommandWithParameters::SetParameterInfo, чтобы описать параметры для поставщика. Заполните структуры PARAMBINDINFO в массиве информацией о параметрах.
Создайте набор привязок (по одной для каждого маркера параметра) с помощью массива структур DBBINDING.
Создайте метод доступа для определенных параметров с помощью метода IAccessor::CreateAccessor. Метод CreateAccessor создает метод доступа на основе набора привязок.
Заполните структуру DBPARAMS.
Выполните команду Execute (в данном случае это вызов хранимой процедуры).
Обработайте набор строк и освободите его с помощью метода IRowset::Release.
Обработайте значения кода возврата и выходного параметра, полученные от хранимой процедуры.
Пример
В этом примере показана обработка набора строк, а также кода возврата и выходного параметра. Результирующие наборы не обрабатываются. Далее представлен образец хранимой процедуры, которую использует приложение.
USE AdventureWorks2008R2;
GO
DROP PROCEDURE myProc;
GO
CREATE PROCEDURE myProc
@inparam int,
@outparam int OUTPUT
AS
SELECT Color, ListPrice
FROM Production.Product WHERE Size > @inparam;
SELECT @outparam = 100
IF (@outparam > 0)
RETURN 999
ELSE
RETURN 888;
GO
Полный образец кода см. в файле InitializeAndEstablishConnection_B.cpp. Архив, содержащий этот образец, можно загрузить на странице загрузок SQL Server MSDN.
Этот образец создан с помощью Microsoft Visual C++ 2005.
![]() |
---|
При возможности используйте проверку подлинности Windows. Если проверка подлинности Windows недоступна, запросите у пользователя ввод учетных данных во время выполнения. Избегайте хранения учетных данных в файле. Если необходимо сохранить учетные данные, зашифруйте их с помощью API-интерфейса шифрования Win32. |