|
Программирование >> Руководство по созданию web приложений
в некоторых случаях Вы можете дополнительные информаци- онные сообщения, возникающие при коде возврата : - - - не рассматривая данную ситуацию как ошибочную. Так как с одной ошибочной ситуацией иногда связано несколько диагности-ческихзаписей, функция SQLGetDiagRecдoлжнaизвлeкaтьэти , в цикле. Рассмотрим прототип функции hType, SQLSMALLINT SQLCHAR* -- : SQLCHAR* . - SQLSMALLINT SQLSMALLINT* puHTtwt); Через параметр hType Вы тип . для которого нуж- но получить диагностику. Здесь Вы можете указать хорошо знакомые значения -\. SQL HANDLE DBC, . и -щтмг,к если при выполнении команды, .. должен со- держать тип идентификатора команды ! . . :. если при создании соединения с данных - тип SQL HANDLE ОВС, и т. д. Параметр hHandle используется для передачи самого идентификатора. Через параметр nRecord Вы передать номер извлекаемой записи. Обычно значение параметра последовательно, начиная с единицы, увели-в цикле. Параметр SQLState указатель на буфер, в который записы- вается код состояния SQLSTATE. Первые два . в этом буфере указывают класс состояния, а < три - подкласс. Подробную информацию о ко- дах состояния Вы найдете в на Microsoft SQL Server. Через параметр pNativeErrorPtr необходимо передать указатель на буфер, в котором будет храниться естественный код ошибки, зависящий от источника данных. Текст об ошибке записывается в буфер, адрес которого передает- ся функции SQLGetDiagRec через параметр pMessageText. Размер этого буфера должен быть указан с помощью параметра И последний параметр pcbText используется для передачи указате- ля на переменную, в которую будет записана длина упомянутого выше сообщения об ошибке. Вот как, например, выглядеть цикл извлечения диагностических записей: RETCODE = = 0L; SWORD =0; szSQLState[256] = SQLSMALLINT - - = i; гс = 255, Записи состояния Указанным выше методом можно получить из двух типов .yiariN ких записей, а именно заголовка. при возникновении любых кроме тех, что вызывают кода завершения : Ч- VALID При использовании ODBC версии 3.x становятся доступными диагностические записи называемые записями состояния. Они генерируются отдельно для каждой записи заголовка и могут быть посредством функции SQLGetDiagField: SQLGetDiagField( SQLSMALLINT n Record, SQLSMALLINT SOlPOINTER SQLSMALLINT SQLSMALLINT* ЧepeзпepвыйпapaмeтphTypeBыдoлжныпepeдaтьфyнкцииSQLGetDiag Field сип для которого нужно получить диагностику. Это ты SQL HANDLE ENV, . и SQL HANDEE DESC. Параметр h Пап die ncntcutxx in я для передачи идентификатора. Через параметр функции SQLGetDiagField передают номер записи заголовка, для которой извлекаются записи состояния. Это тот самый номер, что передается через одноименный параметр функции SQLGetDiagRec. Параметр nDiagld позволяет указать идентификатор извлекаемой записи состояния и задастся в виде одной из констант. С помощью napaMCTpapDiaglnfo Вы передать функции указатель на буфер, к которую будет диагностическая информация. Размер этого буферазадаетсяпараметромпВиТТег817е. nBufferSize . в том если указатель pDiaglnfo ссылается на буфер данных фиксирован- ного размера. Для текстовых строк допускается также указывать в , nBufferSize константу SQL NTS. Она означает, что буфер содержит текстовую строку, закрытую двоичным И наконец, в переменную, адрес которой задается параметром pStringSize, записывается символов в диагностическом сообщении (без учета двоичного нуля, текстовую строку). Вот фрагмент программы, в котором для записи заголовка извлекаются записи состояния: Базы данных в Интернете. ГС = SOLCiet01tyR cCriiancJl TvBe, salhliandie. \\К(.....t (INIIIIItKO . . , . . г JER, ,.1и>1,Е11..111лГ1.[- ; 1Г( JCL,i:!ATA FOy D) < = : . nRecordNumber, NULL); sqlhHandle, nRecordNumber, - ; . . : - . -. NULL); rn = SQLGetDiagField(nHandleType, sqlhHandle, iiRcco rclKuiSer, SQL DIAG SS MSGSTATE, - . ISIMTEGER, NULL); I = nRecordNumber, NULL); f = : .. sqlhHandle, nRecordNumber, sqlhHandle, nRecordNumber, SQL DIAG SS SRVNAME, icbServerlane); Здесь используются константы, перечисленные втаблице 6-2. Таблица 6-2. Идентификаторы типов данных С и ODBC Koiiciaiiia Номер строю! в наборе записей или номер параметра в наборе параметров, с которым связана данная запись Имя процедуры, вызвавшей ошибку : Номер строки в процедуре, вызвавшей появление ошибки Значение состояния, полученное от оператора RAISERROR Степень тяжести ошибки Имя ff-j>n,->ii на котором произошла данная ошибка SQLDIAGSSMSGSTATE SQl. OI*fl S,S SE%EHITT SQLDIAGSSSRyNAME Программа ODBCAPP Программа ODBCAPP, исходные тексты которой мы описываем в этом ле, выводит на консольный экран все записи из файла managers базы данных нашего Интернет-магазина: 1 I frolov I 123 I Administrator 21.12.1999 11:24:44 2 I Petrov I 123 I shjiaoager (not logged yet) 3 I Sidoroff I 123 I I (not logged yet) 5 I TestAcHlrib j 1234 I I (not logged yet) 4 I admin I 123 I . I 05.12.1999 09:50:09
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |