Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / получить параметр хранимой процедуры / 7 сообщений из 7, страница 1 из 1
04.08.2011, 12:36
    #37380341
G_ROM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить параметр хранимой процедуры
у меня такая проблема:
есть хранимая процедура примерно такая:

Код: plaintext
1.
2.
3.
4.
5.
6.
create procedure MyProcName
(IN iID1 int, IN iID2 int, OUT sResult TEXT)
begin
select Column1 into sResult from MyTableName where ID = iID1;
select Column1, Column2, Column3 from MyTableName where ID = iID2;
end

т.е. эта процедура возвращает строку с тремя значениями из трех столбов и одновременно записывает результат другого селекта в выходной параметр. Эта процедура работает нормально и в консоли ее такой вот вызов: call MyProcName(1, 2, @aaa); select @aaa; - дает правильный результат.

вся загвоздка в том, что когда я вызываю эту процедуру из программного кода вот так:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
// Объект подключения
MySqlConnection con = new MySqlConnection(connectionString);

// Команда
MySqlCommand cmd    = new MySqlCommand("MyProcName", con);
cmd.CommandType     = CommandType.StoredProcedure;

// Параметры
//
cmd.Parameters.Add(new MySqlParameter("iID", MySqlDbType.Int32, 4));
cmd.Parameters["iID1"].Value = 1;
//
cmd.Parameters.Add(new MySqlParameter("iUserID", MySqlDbType.Int32, 4));
cmd.Parameters["iID2"].Value = 2;
//
cmd.Parameters.Add(new MySqlParameter("sResult", MySqlDbType.Text));
cmd.Parameters["sResult"].Direction = ParameterDirection.InputOutput;

con.Open();
MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow);

// Проверить, возвращает ли запрос строку.
if (!reader.HasRows) return false;

// Получить первую строку.
reader.Read();

if (System.DBNull.Value != cmd.Parameters["sResult"].Value)
{
    string sresult = (string)cmd.Parameters["sResult"].Value;
}
else
{
    string sresult = null;
}

// ну и дальше получение остальных параметров
//........
con.Close();


он у меня всегда возвращает null в качестве этого параметра sResult. а если я инициализирую этот параметр и делаю его INOUT, то он возвращает мне то же значение, что было при инициализации. т.е. косяк в том видимо, что он не получает результирующие параметры при использоании ExecuteReader. при использовании ExecuteNonQuery параметры всегда возвращаются. как быть??? может както можно перефразировать саму процедуру и запихать например эти два селекта в один.. я в MySQL не шибко разбираюсь. или же можно как-то всетаки получить параметр?? очень не хочется делать два обращения к базе данных изза этого косяка...
...
Рейтинг: 0 / 0
04.08.2011, 13:10
    #37380401
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить параметр хранимой процедуры
Попробуйте прочитать значение параметра после вызова reader.Close()
...
Рейтинг: 0 / 0
04.08.2011, 13:26
    #37380432
G_ROM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить параметр хранимой процедуры
Паганель, большое спасибо, после reader.Close() получил верный параметр. А не могли бы Вы объяснить, почему до reader.Close() параметр не возвращается?
...
Рейтинг: 0 / 0
04.08.2011, 13:30
    #37380440
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить параметр хранимой процедуры
Не могу, это ж я нагуглил а не вспомнил

Я так к БД сто лет уже не доступался
ORMы наше всьо
...
Рейтинг: 0 / 0
04.08.2011, 13:44
    #37380467
G_ROM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить параметр хранимой процедуры
=)))
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
24.04.2013, 12:22
    #38237951
maxapet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить параметр хранимой процедуры
Паганель, спасибо, дружище! И мне помогло!
...
Рейтинг: 0 / 0
24.04.2013, 12:26
    #38237962
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить параметр хранимой процедуры
может и мне попробовать.....( задумчиво так), ведь должно тоже помочь по идее................. ))
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / получить параметр хранимой процедуры / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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