Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ODP.NET и хранимая процедура / 13 сообщений из 13, страница 1 из 1
25.10.2008, 04:01
    #35615745
dsurrea
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODP.NET и хранимая процедура
Есть функция 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
25.10.2008, 04:07
    #35615746
dsurrea
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODP.NET и хранимая процедура
Есть функция 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
25.10.2008, 04:13
    #35615747
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODP.NET и хранимая процедура
Так а проблема в чем?

По коду:

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

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

Код: plaintext
1.
2.
3.
4.
5.
6.
finally
        {
            cmd.Dispose();
            con.Close(); - перед закрытием коннекта, не худо бы проверять, открыт ли он.
            con.Dispose(); - дублирует закрытие - лишняя строка.
        }
...
Рейтинг: 0 / 0
25.10.2008, 04:19
    #35615748
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODP.NET и хранимая процедура
Еще, зачем так многословно?
Вместо:
Код: 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
25.10.2008, 12:31
    #35615849
dsurrea
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODP.NET и хранимая процедура
SQL_Lamer,

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

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

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

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

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

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


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