Ошибка Oracle.DataAccess - PullRequest
       7

Ошибка Oracle.DataAccess

4 голосов
/ 13 марта 2012

У меня есть веб-приложение asp.net / C #, работающее в среде Windows.Проект прекрасно работает и отлично работает на сервере разработки VB.net моего локального компьютера.

Однако при публикации на реальном сервере приложений появляется следующее сообщение об ошибке:

[OracleException (0x80004005): Поставщик не совместим с версией клиента Oracle] [TypeInitializationException: инициализатор типа для «Oracle.DataAccess.Client.OracleConnection» вызвал исключение.]

В настоящее время существует версия этого приложенияи работает просто отлично, я тестирую на живом сервере в другом каталоге.Я даже пытался получить Oracle.DataAccess .dll из рабочего приложения, но все равно получал то же сообщение об ошибке.

Ответы [ 5 ]

14 голосов
/ 13 марта 2012

Прежде всего: клиент / провайдер Oracle - беспорядок.И это относится и к MS one (все равно не рекомендуется), а также к Oracle.

Для подключения к базе данных Oracle через поставщика ODP.NET необходимо правильно настроить три вещи:

  • Клиент Oracle должен быть правильно настроен (не имеет ничего общего с провайдером .NET, это относится к установленному клиенту Oracle, обычно в c: \ oracle)
  • Требуется провайдер ODP.NETчтобы быть совместимым с установленным клиентом Oracle
  • Архитектура клиента и поставщика и вашего приложения должна соответствовать, вы не можете использовать 64-битный клиент с поставщиком / приложением x86 и наоборот

Обычно лучше всего иметь новейшую версию обоих.Но если вы хотите избавиться от этой проблемы раз и навсегда, воспользуйтесь сторонним провайдером Oracle .NET *. 1013 *

ОБНОВЛЕНИЕ

Один из лучших - DataDirect.(без принадлежности):
http://www.datadirect.com/products/net/net-for-oracle/index.html

Это не просто установка (не требуется клиент oracle), но и более быстрая, полностью управляемая, x64 и общая поддержка намного лучше, чем вы получаете сODP.NET один.Хотя это будет стоить вам.

DevArt также довольно приличный (и намного дешевле):
http://www.devart.com/dotconnect/oracle/

Мы решили использовать DataDirect по соображениям расширяемости, это должнооднако не относится к вам.

Здесь вы можете найти хорошую подборку сторонних разработчиков, создающих .NET-провайдеров, но не ограничиваясь оракулом:
http://msdn.microsoft.com/en-us/data/dd363565

1 голос
/ 27 августа 2012
Equals, with Oracle.DataAccess.dll    Works!!!!
//using Oracle.DataAccess.Client

object pdf = null;

var queryString =@"SELECT PDF  FROM DIGITAL  WHERE ID_DIGITAL=1001" ;  //example
var ctx = new Entities();
var entityConn = ctx.Connection as EntityConnection;

if (entityConn != null)
{
var dbConn = entityConn.StoreConnection as OracleConnection;
dbConn.Open();

var cmd = new OracleCommand(queryString, dbConn);
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
pdf = reader[0];
}
}
dbConn.Close();
}
return pdf;
1 голос
/ 13 марта 2012

Мне удалось решить эту проблему путем поиска Oracle.DataAccess.dll на сервере prod. Поэтому вместо того, чтобы пытаться собрать / развернуть проект с Oracle.DataAccess.dll из моей среды разработки, я скопировал .dll из каталога клиента Oracle Prod и включил его в качестве ссылки вместо этого. Я также установил .dll свойства "Копировать локально = true" и "Определенная версия" = true. Похоже, что существует несоответствие между версией клиента oracle на моем сервере dev и сервером prod.

1 голос
/ 13 марта 2012

Я сталкивался с тем же сценарием до

Чтение этого может помочь вам, как ODAC Oracle для .NET

о вашей проблеме на вашем сервере вы должны установить весь клиент ODAC из Oracle

последняя версия сейчас 4.xx

Я установил его, и все работает как шарм

надеюсь, это поможет :)

Береги себя

0 голосов
/ 15 января 2014

В дополнение к другим предложениям, попробуйте запустить Visual Studio от имени администратора.

Я потратил много времени на возня с GAC и различными версиями Oracle.DataAccess.dll, и, в конце концов,просто запускаю VS от имени администратора, чтобы он запустился.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...