С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/63: Рейтинг темы: голосов - 63, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 16.01.2010
Сообщений: 10
1

Выходной параметр хранимой процедуры

25.01.2010, 19:23. Показов 12514. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемое сообщество!
Мне необходимо выполнить хранимую процедуру и в качестве одного из выходных параметров сформировать многострочное сообщение о результатах работы. Я делаю его varchar и формирую но как увидеть его в приложении после выполнения хранимой процедуры. Сделать что-то типа
C#
1
MessageBox.Show(cmd.Parametr["@msg"].value);
не пойму, параметр возвращает пустую строку, хотя в процедуре на t-sql формируется нормально или необходимо тип параметра в Add указывать, не пойму
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2010, 19:23
Ответы с готовыми решениями:

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

Вызов хранимой процедуры
Добрый день У меня есть процедура хранимая в MySQL на добавление строки CREATE DEFINER =...

Создание хранимой процедуры
Здравствуйте, помогите пожалуйста с программой. Есть БД техникума и нужно создать приложение...

Вызов хранимой процедуры
Здравствуйте, помогите пожалуйста. Мне нужно сделать, чтобы на форму в ЛистБокс выводилась...

12
Комбайнёр
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
26.01.2010, 09:50 2
Вы указали в параметре, что это output переменная?
0
137 / 133 / 20
Регистрация: 03.02.2009
Сообщений: 608
26.01.2010, 09:59 3
Roman83, посмотрите повнимательнее про выходные параметры output и return - это две разные вещи.
0
0 / 0 / 0
Регистрация: 16.01.2010
Сообщений: 10
26.01.2010, 11:46  [ТС] 4
На сколько я понимаю процедура может вернуть значение return-ом, но только целое число, процедуру не заставить вернуть varchar, естественно я указываю, что параметр output, я без проблем получаю на вызывающей стороне output параметры типа int, но тип varchar пока получить не могу, первое ощущение таково, что в коде на C# я немогу преобразовать возвращаемое значение varchar в что-нибудь, мне подходящее, например в string.
0
137 / 133 / 20
Регистрация: 03.02.2009
Сообщений: 608
26.01.2010, 11:58 5
Во-первых, процедура может вернуть любой тип

SQL
1
2
3
4
CREATE PROCEDURE [dbo].[proc] 
AS
DECLARE @C VARCHAR(20)
RETURN @C
Добавлено через 3 минуты
Во-вторых, в C# можно так же получить любой тип output


C#
1
sqlcom.Parameters.Add(new SqlParameter("@C", [B]SqlDbType.Int[/B], 0, ParameterDirection.Output, false, 0, 0, "@C", DataRowVersion.Default, null));
Добавлено через 1 минуту
P.S. Не пойму откуда вы такие предположения взяли...
0
0 / 0 / 0
Регистрация: 16.01.2010
Сообщений: 10
26.01.2010, 13:10  [ТС] 6
Ваша процедура сработает и вернет 0
Я пробую выполнить процедуру

SQL
1
2
3
4
5
6
7
ALTER PROCEDURE [dbo].[e] 
AS
BEGIN
    DECLARE @c VARCHAR(50);
    SELECT @c = 'Возврат';
    RETURN @c;
END
На что мне ответ:
Сообщение 245, уровень 16, состояние 1, процедура e, строка 12
Ошибка преобразования значения varchar "Возврат" в тип данных int.

Для int я могу указать SqlDbType.Int (а могу и не указать, он сам потом приведет), а что для varchar указать пока не соображу или мне вообще не varchar нужен
0
Комбайнёр
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
26.01.2010, 13:22 7
если Вы возвращаете return-ом, то в переменную смотерть не нужно
0
137 / 133 / 20
Регистрация: 03.02.2009
Сообщений: 608
26.01.2010, 13:27 8
Цитата Сообщение от Roman83 Посмотреть сообщение
Ваша процедура сработает и вернет 0
Я пробую выполнить процедуру

SQL
1
2
3
4
5
6
7
ALTER PROCEDURE [dbo].[e] 
AS
BEGIN
    DECLARE @c VARCHAR(50);
    SELECT @c = 'Возврат';
    RETURN @c;
END
На что мне ответ:
Сообщение 245, уровень 16, состояние 1, процедура e, строка 12
Ошибка преобразования значения varchar "Возврат" в тип данных int.

Для int я могу указать SqlDbType.Int (а могу и не указать, он сам потом приведет), а что для varchar указать пока не соображу или мне вообще не varchar нужен
SqlDbType.VarChar
В чем проблема то?
0
213 / 107 / 15
Регистрация: 28.01.2009
Сообщений: 481
26.01.2010, 13:44 9
C#
1
2
3
cmd.CommandType=CommandType.StoredProcedure;
cmd.CommandText="SP_NAME";
SqlCommandBuilder.DeriveParameters(cmd);
Далее юзаем cmd.Parameters и не заморачиваемся...
0
137 / 133 / 20
Регистрация: 03.02.2009
Сообщений: 608
26.01.2010, 13:47 10
Roman83, извиняюсь, я попутал чуток.

"Оператор RETURN в СУБД MS SQL возвращает значение целочисленной переменной и прекращает выполнение."
Т.е. никакие varchar-ы тут не покатят...

Так что varchar возвращайте через OUTPUT - вот там все можно...
0
0 / 0 / 0
Регистрация: 16.01.2010
Сообщений: 10
26.01.2010, 14:25  [ТС] 11
Да я изначально не хотел указывать типы через SqlDBType, для общности, просто для некоторых параметров можно сделать типа Convert.ToInt32(выходной параметр) не указывая при этом что он там какой-то DBType.Int32, а для varchar не могу, ну да ладно укажу DBType
0
213 / 107 / 15
Регистрация: 28.01.2009
Сообщений: 481
26.01.2010, 16:09 12
Цитата Сообщение от Roman83 Посмотреть сообщение
Да я изначально не хотел указывать типы через SqlDBType ... ну да ладно укажу DBType
Скажите, Вы топик по диагонали читаете?
0
0 / 0 / 0
Регистрация: 16.01.2010
Сообщений: 10
26.01.2010, 21:06  [ТС] 13
Да борода получилась, я ж в t-sql совсем чайник. Я привык что varchar - переменной длинны (вроде как с \0 на конце) и размер никогда ей не указывал, если надо только максимально допустимый, вот и сейчас даю varchar - а она мне строку из одного символа, надо размер. Благодарю всех за помощь и потраченные нервы, за DeriveParameters спасибо.
0
26.01.2010, 21:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2010, 21:06
Помогаю со студенческими работами здесь

Вызов хранимой процедуры в с#
Хочу обновить бд с помощью хранимой процедуры ALTER procedure . @id_TP int, @id_worker int, @DT...

Создание хранимой процедуры в C#
Есть БД в SQL. Интерфейс создается на C#. Как создать такую хранимую процедуру: CREATE PROC...

Вызов хранимой процедуры
Как вызвать хранимую процедуру в БД Access через Viasual Studio 2015 Community. Хранимые процедуры:...

Отчет из хранимой процедуры
Подскажите, как в Visual Studio 2010 создать отчет на основе хранимой процедуры? код процедуры ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru