Программирование >>  Руководство по созданию web приложений 

1 ... 94 95 96 [ 97 ] 98 99 100 ... 141


Запуск хранимых процедур

хранимых упростить

с базами данных за счет отделения

Как уже говорилось . разработку и грамм от данных.

Практически при создании приложений для Интернета или Вам

вызвать хранимые процедуры из серверных сценариев JScript или Script, встроенных в ASP, либо из расширений сервера таких,

как программы CGI или 1SAPI. В последнем случае мы

дуем обращаться к бале данных Microsoft SQL Seryer с i интерфейса

ODBC, а не ADO или OLE DB.

Именно поэтому, рассказывая о работе с методами доступа ADO и OLE DB в приложениях, написанных на С++, мы опустили материал о хранимых

процедур как второстепенный. же необходимо к нему вернуться, так как

уже в следующей главе мы займемся созданием расширений сервера Web, обращающихся к базам данных через ODBC.

Привязка параметров

Запуск процедур выполняется примерно таким же образом, что и команд

при помощи функции SQLExecDirect Вы должны сформировать команду в виде шаблона хранимой процедуры и затем запустить ее.

Однако чем рассказать о шаблонах хранимых процедур, мы займем-

ся привязкой входных и выходных impirnvfiHiH. передаваемых процедуре при запуске. В ходе этой параметры процедуры привязываются к локаль-

ным переменным, в программе.

Для : параметров ; процедур Вы использовать

SQLBindParameter, которой приведен ;

урв.

SQLSMALLINT nParameterType, SQLSMALLINT

SQLINTEGER

SQLINTEGER* . -

Через параметр liStatement программа должна передать функции SQLBindParameter созданный идентификатор команды запускапроцедуры.

Параметр . з Г задает номер параметра процедуры,

который будет привязан к локальной переменной. Нумерация параметров начинается с единицы.

С помощью параметра nlnputOutputType функции SQLBindParameter передается одно из следующих значений, определяющих направление данных: Е0ЕРАЯйИ 1МРЦТ (входной параметр), . (выходной параметр)

или SQE.P,AR*J 1MPIJT CHJTPUT (входной и выходной параметр).



SQLCHAR

= . . iiaterfhStit, 2, SuLPAflAR.illPUT,

QLj:HAR, 50, 0, . 51, IctiAdiTdnPaas);

SQLCHAR - : ]:

SQLINTEGER . . . = SQL NTS;

rc . . . 3, . - PilT.

SQL C CHAR, 16, 0,

Первый и второй параметры - входные. Они привязываются .

SQLI meter с помощью . . SQL PARAM INPUT. Для третьего, выход-

IIIаи параметра мы указали Константу AHAP, iHITPUT

Все наши - являются текстовыми строками. Локальные перемен-

ные, которые мы будем к привязывать, расположены в массивах символов типа SQLCHAR. Соответственно через четвертый и пятый i . мы передаем функции SQLBindParameter константы SQL С CHAR и [ .

Обратите внимание, как мы указываем количество символов в параметре (значение (iColiimnSlze функции SQLBindParameter). Входные параметры

Параметр .: . определяет идентификатор типа данных С локальной привязываемой к параметру. Здесь можно указывать такие констан-. как . - - или ,C SSHOBT. Полный список идентификаторов приве-в таблице

Тип параметра хранимой процедуры указывается через параметр пРага-: функции .... г Здесь указываются такие типы данных

SQL, как или о (см. 6-1).

Параметр : определяет максимальное количество символов, цифр или точность иередаваемых через параметр.

С ; ; параметра i программа задаст количество десятич-

ных цифр маркера : .

Через параметр : программа передает функции SQLBind-

Paraiete г указатель на буфер локальной иеременной, которая должна быть ири-вязана к параметру хранимой процедуры. Длина этого буфера определяется параметром cbBufferSize.

И наконец, через параметр pc;bPt . Вы передаете указатель на

iiyuj, в которую предварительно была записана длина параметра.

В следующем фрагменте кода мы выполняем привязку двух входных параметров и одного выходного параметра:

SQLCHAR 1

SQLINTEGER = SQL NTS;

го = - : - MterCRStnt, 1, Sol, PAR AM INPIJT SQL CHAR. 50. 0.



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

Последние три параметра функции SOtmndParaieter описывают буферы, к соответствующим параметрам. Они имею! одинаковый размер (51 символ с учетом двоичного нуля, закрывающего строку).

Запуск процедуры

Как мы уже говорили, для запуска на выполнение хранимых процедур можно воспользоваться уже знакомой Вам функцией SOLExacDirecL

Пиже показан фрагмент кода, в котором запускается процедура с тремя параметрами:

, ..... JTS);

Обратите . что через второй мы передали функции SQLExec-

Direct строку щаблона хранимой процедуры, в которой параметры отмечены символом -?а

Помимо параметров процедура может возвращать значение. Для такой процедуры следует подготовить щаблон следующего вида: {? = call РгоаМагвС?,?)}

Папомним, что при выполнении привязки параметров хранимой процедуры фyнкцииSQLBindParameterнeoбxoдимoyк.Laaнoмepпpивязывaeмoгoпapaмeтpa Если хранимая процедура возвращает то для привязки . переменной к этому значению необходимо указать номер 1. При этом остальные параметры процедуры нумеруются, начиная со значения 2.

При успещном запуске .. . процедуры :а :. * возвра-

щает не только значения . nSOLJIJO ,: .: ; нои DATA.

Код заверщения SQLNODATA означает, что при процедуры не был

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

зависимости от тех или иных условий возвращает выходные параметры, не изменяя базу набор записей может и а а создаваться.

Извлечение значений выходных параметров процедуры

Перед извлечением значений выходных . : хранимой процедуры (а

также значения кода возврата . необходимо выполнить обработку

наборов записей, созданных при выполнении команды.

Если эти результаты не нужны, их можно проигнорировать, вызвав ее в Ш!каа. функцию S

break;



1 ... 94 95 96 [ 97 ] 98 99 100 ... 141

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика