Поделиться через


Как выполнить хранимую процедуру (с использованием синтаксиса ODBC CALL) и обработать коды возврата и выходные параметры (OLE DB)

Хранимые процедуры SQL Server могут иметь целочисленные коды возврата и выходные параметры. Коды возврата и выходные параметры передаются с сервера в последнем пакете и потому недоступны приложению до полного освобождения набора строк. Если команда возвращает несколько результатов, то данные выходного параметра будут доступны тогда, когда метод IMultipleResults::GetResult вернул значение DB_S_NORESULT или при полном освобождении интерфейса IMultipleResults (в зависимости от того, что произошло раньше).

Обработка кодов возврата и выходных параметров

  1. Сконструируйте инструкцию SQL, использующую escape-последовательность ODBC CALL. Инструкция должна использовать маркеры параметров для каждого изменяемого входного и выходного параметра и для каждого возвращаемого процедурой значения (если есть). Для входных параметров можно либо использовать маркеры параметров, либо явно указывать значения.

  2. Создайте набор привязок (по одной для каждого маркера параметра) с помощью массива структур DBBINDING.

  3. Создайте метод доступа для определенных параметров с помощью метода IAccessor::CreateAccessor. Метод CreateAccessor создает метод доступа на основе набора привязок.

  4. Заполните структуру DBPARAMS.

  5. Выполните команду Execute (в данном случае это вызов хранимой процедуры).

  6. Обработайте набор строк и освободите его с помощью метода IRowset::Release.

  7. Обработайте значения кода возврата и выходного параметра, полученные от хранимой процедуры.

Пример

В этом примере показана обработка набора строк, а также кода возврата и выходного параметра. Результирующие наборы не обрабатываются. Далее представлен образец хранимой процедуры, которую использует приложение.

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_A.cpp. Архив, содержащий этот образец, можно загрузить на странице загрузок SQL Server MSDN.

Этот образец создан с помощью Microsoft Visual C++ 2005.

Примечание по безопасностиПримечание по безопасности

При возможности используйте проверку подлинности Windows. Если проверка подлинности Windows недоступна, запросите у пользователя ввод учетных данных во время выполнения. Избегайте хранения учетных данных в файле. Если необходимо сохранить учетные данные, зашифруйте их с помощью API-интерфейса шифрования Win32.

См. также

Основные понятия