eshezo Ответов: 2

Проблема клиента Oracle с выходным параметром


Привет,
у меня проблема с клиентом Oracle.
у меня есть oracle database 10g, я установил oracle client 12c все приложения работают нормально, но одно из приложений использует приведенный ниже код для входа в систему, но при выполнении команды два выходных параметра возвращают неполные данные, они возвращают ровно половину длины данных.

* у меня есть windows server 2008 r2.
* iis 7.
* Клиент Oracle 64 бит.
* Решение в рамках фреймворка 4.

cmd = new OracleCommand("<SP_NAME>", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("USERNAME", OracleType.VarChar).Value = <username>;
            cmd.Parameters.Add("PASSWORD", OracleType.VarChar).Value = <password>;

            OracleParameter p1 = new OracleParameter("LOGIN_STATUS", OracleType.Number, 1);
            p1.Direction = ParameterDirection.Output;


            OracleParameter p2 = new OracleParameter("MESSAGE", OracleType.VarChar, 4000);
            p2.Direction = ParameterDirection.Output;


            OracleParameter p3 = new OracleParameter("SES_ID", OracleType.Char, 16);
            p3.Direction = ParameterDirection.Output;

            cmd.Parameters.Add(p1);
            cmd.Parameters.Add(p2);
            cmd.Parameters.Add(p3);

            OpenConnection();
            cmd.ExecuteNonQuery();

            string[] result = { "", "", "", "", "" };

            result[0] = cmd.Parameters["LOGIN_STATUS"].Value.ToString();
            result[1] = cmd.Parameters["MESSAGE"].Value.ToString();
            result[2] = cmd.Parameters["SES_ID"].Value.ToString();


Это приложение отлично работает на старом сервере.
пожалуйста, любой совет.

PIEBALDconsult

Может быть, поля на самом деле являются широкими символами? Проверьте определение столбца - это может быть VARCHAR2 ( 4000 char), который указывает (широкие) символы, а не байты.

PIEBALDconsult

Кроме того, каким провайдером вы пользуетесь?

Вы должны использовать один из них от Oracle
Оракул.Доступа к данным.Клиент.OracleParameter p1 = новый Оракул.Доступа к данным.Клиент.OracleParameter ( "P1", Oracle.Доступа к данным.Клиент.OracleDbType.Varchar2 , 4000 , System.Data.ParameterDirection.Выход ) ;

Не тот, что от Microsoft ... (типы В System. Data.OracleClient устарели. Эти типы по-прежнему поддерживаются в текущей версии of.NET фреймворк, но будет удален в будущем выпуске. Корпорация Майкрософт рекомендует использовать стороннего поставщика Oracle.)
Системы.Данных.OracleClient.Р0 OracleParameter = новая система.Данных.OracleClient.OracleParameter ( "p0", System.Data.OracleClient.OracleType.Тип Varchar , 4000 , Система.Данных.ParameterDirection.Выход ) ;

Jörgen Andersson

Проверьте типы данных, если это должен быть NVarchar вместо Varchar

2 Ответов

Рейтинг:
1

Rinat Ahmedjanov

набор
OracleParameter ("сообщение", OracleType.Char, 4000);


и после выполнения
результат[1] = ЦМД.Параметры["сообщение"].Значение.ToString (). Trim();

или установите клиент 11...


Рейтинг:
0

Member 13403381

Не используйте систему.Оракул.Клиент больше не работает (с клиентом 12c).
Вы можете воспользоваться оракулом.DataAccess, который является частью установки клиента oracle
или Оракул.Вместо этого ManagedDataAccess.