powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ODP.NET и хранимая процедура
13 сообщений из 13, страница 1 из 1
ODP.NET и хранимая процедура
    #35615745
dsurrea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть функция PL/SQL которая возвращает значение bool, я пытаюсь получить это значение вот так

Код: 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.
OracleConnection con = Connect();
        OracleCommand cmd = new OracleCommand("LOGIN.CHECK_DB_PASSWORD1", con);
        cmd.CommandType = CommandType.StoredProcedure;
        
        OracleParameter oraNAme = cmd.Parameters.Add("p_user_name1", OracleDbType.Varchar2);
        oraNAme.Direction = ParameterDirection.Input;
        oraNAme.Value = name;

        OracleParameter oraPAss = cmd.Parameters.Add("p_password1", OracleDbType.Varchar2);
        oraPAss.Direction = ParameterDirection.Input;
        oraPAss.Value = pass;

        OracleParameter oraRes = cmd.Parameters.Add("v_ret", OracleDbType.Int32);
        oraRes.Direction = ParameterDirection.ReturnValue;


        try
        {
            cmd.ExecuteScalar();
            if (!(bool)cmd.Parameters["v_ret"].Value)
                return false;
            else
                return true;

        }
        catch (Exception e)
        {
            Console.WriteLine("Error: {0}", e.Message);
            return false;
        }
        finally
        {
            cmd.Dispose();
            con.Close();
            con.Dispose();
        }

...
Рейтинг: 0 / 0
ODP.NET и хранимая процедура
    #35615746
dsurrea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть функция PL/SQL которая возвращает значение bool, я пытаюсь получить это значение вот так

Код: 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.
        OracleConnection con = Connect();
        OracleCommand cmd = new OracleCommand("LOGIN.CHECK_DB_PASSWORD1", con);
        cmd.CommandType = CommandType.StoredProcedure;
        
        OracleParameter oraNAme = cmd.Parameters.Add("p_user_name1", OracleDbType.Varchar2);
        oraNAme.Direction = ParameterDirection.Input;
        oraNAme.Value = name;

        OracleParameter oraPAss = cmd.Parameters.Add("p_password1", OracleDbType.Varchar2);
        oraPAss.Direction = ParameterDirection.Input;
        oraPAss.Value = pass;

        OracleParameter oraRes = cmd.Parameters.Add("v_ret", OracleDbType.Int32);
        oraRes.Direction = ParameterDirection.ReturnValue;


        try
        {
            cmd.ExecuteNonQuery();
            if (!(bool)cmd.Parameters["v_ret"].Value)
                return false;
            else
                return true;

        }
        catch (Exception e)
        {
            Console.WriteLine("Error: {0}", e.Message);
            return false;
        }
        finally
        {
            cmd.Dispose();
            con.Close();
            con.Dispose();
        }


И получаю исключение

ORA-06550: Строка 1, столбец 17:
PLS-00382: выражение неправильного типа
ORA-06550: Строка 1, столбец 7:
PL/SQL: Statement ignored

мне кажется это связано с cmd.Parameters.Add("v_ret", OracleDbType.Int32); то что здесь должен быть параметр типа bool...

Не подскажите в чем дело?
...
Рейтинг: 0 / 0
ODP.NET и хранимая процедура
    #35615747
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так а проблема в чем?

По коду:

Пользуйтесь конструкцией using вместо try/finally.

Код: plaintext
1.
OracleConnection con = Connect(); - это ваша функция? что там?

Код: plaintext
1.
2.
3.
4.
5.
6.
finally
        {
            cmd.Dispose();
            con.Close(); - перед закрытием коннекта, не худо бы проверять, открыт ли он.
            con.Dispose(); - дублирует закрытие - лишняя строка.
        }
...
Рейтинг: 0 / 0
ODP.NET и хранимая процедура
    #35615748
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще, зачем так многословно?
Вместо:
Код: plaintext
1.
2.
3.
4.
            if (!(bool)cmd.Parameters["v_ret"].Value)
                return false;
            else
                return true;
пишите
Код: plaintext
1.
            return (bool)cmd.Parameters["v_ret"].Value;
...
Рейтинг: 0 / 0
ODP.NET и хранимая процедура
    #35615849
dsurrea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL_Lamer,

блин, нажал пару табов, и сообщение "сорвалось". ниже по форуму моя проблема описана.
...
Рейтинг: 0 / 0
ODP.NET и хранимая процедура
    #35615855
dsurrea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я получаю исключение

ORA-06550: Строка 1, столбец 17:
PLS-00382: выражение неправильного типа
ORA-06550: Строка 1, столбец 7:
PL/SQL: Statement ignored

мне кажется это связано с cmd.Parameters.Add("v_ret", OracleDbType.Int32); то что здесь должен быть параметр типа bool...
...
Рейтинг: 0 / 0
ODP.NET и хранимая процедура
    #35615967
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так а зачем вы ему integer передаете?
Вы пользуетесь подключаемым провайдером, типа Oracle Data Provider for .NET?
Там есть тип OracleDBType.Byte, попробуйте его заюзать.
Или фрэймворковский DBType.Boolean попробуйте заюзать.
Я по ораклу не спец, но думаю OracleDBType.Byte - то, что вам надо.
...
Рейтинг: 0 / 0
ODP.NET и хранимая процедура
    #35616028
dsurrea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL_Lamer,

если бы, я пробовал OracleDBType.Byte
...
Рейтинг: 0 / 0
ODP.NET и хранимая процедура
    #35616061
dsurrea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dsurrea,

и вообще, я где то здесь на sql.ru видел, что должно быть точное соответствие типов и названия переменных при создании параметров
...
Рейтинг: 0 / 0
ODP.NET и хранимая процедура
    #35616085
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, в именах параметров должно быть точное соответствие.
Покажите скрипт процедуры.
...
Рейтинг: 0 / 0
ODP.NET и хранимая процедура
    #35616102
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а разве в оракле есть тип bool?
...
Рейтинг: 0 / 0
ODP.NET и хранимая процедура
    #35616113
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, это обычная проблема, вы не пользовались поиском. Почитайте здесь и здесь .
...
Рейтинг: 0 / 0
ODP.NET и хранимая процедура
    #35616137
dsurrea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL_Lamer,

спасибо, это мне помогло.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ODP.NET и хранимая процедура
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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