2010-07-01 4 views
1

Я использую клиент поставщика данных Oracle.DataAccess.Client. У меня возникла проблема с созданием нового экземпляра объекта OracleException, но он продолжает говорить мне, что нет публичных конструкторов. Я видел, что другие имели ту же проблему и пробовали свои решения, но они, похоже, не работают. Вот мой тестовый код:Как создать экземпляр Oracle.DataAccess.Client.OracleException для использования с NMock

object[] args = { 1, "Test Message" }; 
ConstructorInfo ci = typeof(OracleException).GetConstructor(BindingFlags.NonPublic 
    | BindingFlags.Instance, null, System.Type.GetTypeArray(args), null); 
var e = (OracleException)ci.Invoke(args); 

При отладке тестового кода, я всегда получаю значение NULL для «Х».

Разве Oracle изменила библиотеку, чтобы этого не допускать? Что я делаю неправильно и что мне нужно сделать, чтобы создать экземпляр объекта OracleException для использования с NMock?

Кстати, я использую клиентскую библиотеку для версии 10g.

Спасибо,

Charlie

ответ

0

OracleException в ODP.NET не то же самое, как OracleException в клиенте Microsoft. OracleException содержит 5 конструкторов, информацию о которых вы можете получить с помощью GetConstructors().

В полученном списке конструкторов вы увидите, что нет конструктора с параметрами (int, string). Вот почему вы получаете NULL в ци.

Если вы укажете правильный список параметров, у вас будет собственный ConstructorInfo, и он сможет вызвать конструктор Invoke (param);

Однако конструктор OracleException, не предназначенный для вызова подобным образом - не все поля будут иметь правильную информацию.

2All: мне нужно следующее OracleException: ORA-00001 ограничение уникальности (string.string) нарушается ORA-03113 с истекшим файла на канале связи ORA-03135: соединение потерял контакт ORA-12170: TNS : Время ожидания подключения для тестирования. Как их создать?