Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Проблема с обработкой output параметра на клиенте / 8 сообщений из 8, страница 1 из 1
06.09.2005, 04:29
    #33252844
auz
auz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой output параметра на клиенте
Доброго времени суток!!!
Если у кто-то сможет помочь в решении проблемы буду очень благодарен.
Суть в следующем. Создаю я следующую сохраненную процедуру:
CREATE PROCEDURE AddTheme2
@ThemeName varchar(40),
@ParentTheme numeric = null,
@result int output
AS
BEGIN
-- Insert values into our table
INSERT
INTO Theme(Name,ID_Parent)
VALUES (@ThemeName,@ParentTheme)
-- and return ID of created row
select @result = @@identity
return @@identity
END
При запуске процедуры в SQL Advantage проблем никаких не возникает. Но когда я пробую вызывать процедуру из своего клиента написанного на C#, значение выходного параметра @result всегда остается null, причем и вставка в базу и возвращение параметра RETURN_VALUE проходят нормально.
Никто не подскажет в чем прикол с @result?

P.S. Вообще я раньше писал на Delphi+Oracle, а вот сейчас пробую на C#+Sybase. Я попробовал ту же самую процедуру вызывать с клиента написанного на родном Дельфи эффект тот же самый. Я использую ASE 12.5 Server, в качестве OLE DB Provider'а - Sybase.ASEOLEDBProvider.2.
...
Рейтинг: 0 / 0
06.09.2005, 09:00
    #33252949
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой output параметра на клиенте
тынць
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
06.09.2005, 11:27
    #33253329
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой output параметра на клиенте
Во-первых, это не совсем правильная процедура с точки зрения ASE.
Код возврата процедуры не должен содержать в себе предметно-ориентированное значение, а должен быть
0 если процедура выполнена успешно.

> 0 , если процедура выполнена с ошибкой.
При этом еще надо добавить, что @@identity всегда numeric, а код возврата - int, поэтому @@identity может просто в int не влезть.

Но это все не критично, так тоже может работать.
Думаю, проблема в том, что на клиентской стороне ты не объявил параметр как выходной. Это тоже нужно делать .
...
Рейтинг: 0 / 0
06.09.2005, 14:24
    #33254009
auz
auz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой output параметра на клиенте
to ExSoft:
Как раз ретурн значение я получаю нормально.
to MasterZiv:
На клиентской стороне тоже вроде все делаю правильно. Изначально я проставлял output direction для многострадального параметра @result. Потом от безнадеги пробовал и ReturnValue и inputoutput.
Код возврата процедуры использовался для того чтобы посмотреть, а вообще он с @@identity работать умеет? Кстати если я правильно понял документацию, код возврата должен быть <0 если процедура выполнена с ошибкой и Sybase под это дело забил коды с -1 до -99...
...
Рейтинг: 0 / 0
06.09.2005, 17:36
    #33254652
Crip
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой output параметра на клиенте
2auz
1) Для C# лучше юзать родной .NET provider.
2) Забейте на то что возвращает return. Лучше ошибки обрабатывайте.
3) Какая у версия Sybase? Поищите последний EBF для вашей версии
4) При работе с identity не забывайте про identity_gap

2MasterZiv
12.5.3 понимает identity любых целых типов.
...
Рейтинг: 0 / 0
07.09.2005, 14:58
    #33256603
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой output параметра на клиенте
А что возвращает OleDbCommandBuilder.DeriveParameters()
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
cmd.CommandType=CommandType.StoredProcedure;
cmd.CommandText="AddTheme2";
OleDbCommandBuilder.DeriveParameters(cmd);
foreach(OleDbParameter param in cmd.Parameters)
{
...
}
(для param.ParameterName=="result")?

BTW, попытайтесь полученную info и заюзать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
...
cmd.CommandType=CommandType.StoredProcedure;
cmd.CommandText="AddTheme2";
OleDbCommandBuilder.DeriveParameters(cmd);
cmd.Parameters["ThemeName"].Value="XXX";
cmd.Parameters["ParentTheme"].Value= 1 ;
cmd.ExecuteNonQuery();

int
  result = cmd.Parameters["result"].Value!=DBNull.Value ? Convert.ToInt32(cmd.Parameters["result"].Value) : int.MinValue;
...
мо так прокатит...

P.S. У мну была аналогичная ситуация: на одной маше все передавалось-возвращалось, на другой - нЭт Ж8-/ Проблема исчезла после пере'install'а клиента...
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
07.09.2005, 15:22
    #33256695
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой output параметра на клиенте
auz
в качестве OLE DB Provider'а - Sybase.ASEOLEDBProvider.2

а че 2 , а не просто Sybase.ASEOLEDBProvider ?
хотя... у меня и под Sybase.ASEOLEDBProvider , и под Sybase.ASEOLEDBProvider.2 с дрозофилой все нормально...
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
08.09.2005, 09:24
    #33257780
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой output параметра на клиенте
auzКстати если я правильно понял документацию, код возврата должен быть <0 если процедура выполнена с ошибкой и Sybase под это дело забил коды с -1 до -99...
Нет. Он должен быть 0, если ошибки нет, отрицательные коды возврата - это системные ошибки, ASE их резервирует за собой. Положительные - пользовательские, т.е. для программистов процедур.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Проблема с обработкой output параметра на клиенте / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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