Проблема клиента 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