powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL Server <---> ADO
8 сообщений из 8, страница 1 из 1
SQL Server <---> ADO
    #32073166
Cepera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такая проблема.
1. На SQL Server 2000 есть процедурка, например:
Код: plaintext
1.
2.
3.
4.
5.
6.
create proc ##p_retMessage
as
  select 'error' as  errors
  raiserror('Сушите весла!',  16 ,  2 )
  raiserror('Cейчас cлонов буду раздавать!!!',  16 ,  2 ) 
GO

2. Подключаемся к серверу через ADO и запускаем эту процедуру, например, JScript:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var conn = new ActiveXObject('ADODB.Connection');
var cString = 'provider=sqloledb.1;server=localhost;trusted_connection=yes';
conn.Open(cString);
try {
conn.Execute('exec ##p_retMessage');
}
catch(e){
}       
WScript.echo( conn.Errors.Count );
conn.Close();


Проблема в том, что ошибка, которую должна вернуть процедура, на клиент не возвращается. Если же закомментировать select, то ошибка возвращается, но только первая, вторая же не возвращается.
Может кто-нибудь объяснит в чем здесь траблы?
...
Рейтинг: 0 / 0
SQL Server <---> ADO
    #32073176
Александр Спелицин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Траблы" в OLE_DB провайдере для MSSQL. Используйте OLE_DB провайдер для ODBC и у Вас такого не будет.
...
Рейтинг: 0 / 0
SQL Server <---> ADO
    #32073184
Фотография Jimmy Boy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пускаем в QA:
select 'error' as errors
raiserror('Сушите весла!', 16, 2)
raiserror('Cейчас cлонов буду раздавать!!!', 16, 2)
получаем:

(1 row(s) affected)
Server: Msg 50000, Level 16, State 2, Line 2
Сушите весла!
Server: Msg 50000, Level 16, State 2, Line 3
Cейчас cлонов буду раздавать!!!

пускаем:
raiserror('Сушите весла!', 16, 2)
raiserror('Cейчас cлонов буду раздавать!!!', 16, 2)
получаем:
Server: Msg 50000, Level 16, State 2, Line 1
Сушите весла!
Server: Msg 50000, Level 16, State 2, Line 2
Cейчас cлонов буду раздавать!!!
Сдается мне, нужно поковырять - как достать не только первый месседж от SQL. Возможно, каждый возвращается в отдельном рекордсете.
...
Рейтинг: 0 / 0
SQL Server <---> ADO
    #32073204
Фотография sparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитай в документации по ADO о колекции ошибок и посмотри примеры её использования. В ней копятся все ошибки и сообщения.
...
Рейтинг: 0 / 0
SQL Server <---> ADO
    #32073233
Cepera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Sparrrow: да в документации так и сказано, даже пример приведен, но там все для одной ошибки и то которая не внутри SP происходит

> Jimmy Boy: что уж я только не ковырял, а из-за того-что ошибки не возвращаются на клиент - все плохо работает :(

> Александр Спелицин: если сделать так, то действительно будет работать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
var conn = new ActiveXObject('ADODB.Connection');
var cString = 'driver={SQL Server};server=localhost;trusted_connection=yes';
conn.Open(cString);
try {
conn.Execute('exec ##p_retMessage');
}
catch(e){
}       
WScript.echo( conn.Errors.Count );
conn.Close();


Но тогда уместен вопрос, а почему через родной OLEDB провайдер для MSSQL не работает???

И еще: ODBC API does not support explicit transactions, only autocommit and implicit transactions
...
Рейтинг: 0 / 0
SQL Server <---> ADO
    #32073250
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А где SET NOCOUNT ON в процедуре? Я не вижу. "Откройте мне веки" (С) Гоголь
...
Рейтинг: 0 / 0
SQL Server <---> ADO
    #32073254
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя это не поможет в данном случае. Просто ADO из всего output считывает первый набор данных и на этом считает свою миссию выполненной. Чтобы наткнуться на первую ошибку, надо сделать NextRecordset. А до второй дело так и не дойдет, потому что на первой ошибке генерится исключение клиентом и считывание output прекращается.
...
Рейтинг: 0 / 0
SQL Server <---> ADO
    #32073262
Cepera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Dankov: причем здесь SET NOCOUNT ON я не понял??? Но я на всякий случай проверил - все равно не работает :(

>Александр Спелицин: кстати, все ошибки возвращаются при использовании OLEDB провайдер для ODBC только в случае если перед этим не было Select :(
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL Server <---> ADO
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]