UpATL Ответов: 2

Значение не может быть нулевым, ключ параметра


Система.ArgumentNullException: значение не может быть null

Имя параметра : ключ

Ошибка возникает в conn.open()

Приложение не может подключиться к базе данных.
но строка подключения указана в файле webconfig.

Аутентификация через SQL сервер
а таблицы базы данных остальной части приложения-это Oracle.
Поставщик Услуг : Oracle.ManagedDataAccess.Клиент


Value cannot be null.
Parameter name: key
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ArgumentNullException: Value cannot be null.
Parameter name: key

Source Error: 


Line 179:                OracleDataAdapter da = new OracleDataAdapter(cmd);
Line 180:                DataSet ds = new DataSet();
Line 181:                conn.Open();
Line 182:                da.Fill(ds);
Line 183:

трассировка стека:
[ArgumentNullException: Value cannot be null.
Parameter name: key]
   System.Collections.Generic.Dictionary`2.FindEntry(TKey key) +12994473
   OracleInternal.Common.SyncDictionary`2.ContainsKey(K k) +79
   OracleInternal.ConnectionPool.PoolManager`3.CreateServiceCtx(PR pr) +58
   OracleInternal.ConnectionPool.PoolManager`3.PutNewPR(PR pr, Boolean bForPoolPopulation) +288
   OracleInternal.ConnectionPool.PoolManager`3.CreateNewPR(Int32 reqCount, Boolean bForPoolPopulation, ConnectionString csWithDiffOrNewPwd, CriteriaCtx criteriaCtx, String instanceName, List`1 switchFailedInstNames) +3667
   OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, CriteriaCtx criteriaCtx, String affinityInstanceName, Boolean bForceMatch) +8424
   OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword, Boolean bGetForApp, CriteriaCtx criteriaCtx, String affinityInstanceName, Boolean bForceMatch) +951
   OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword, CriteriaCtx criteriaCtx) +1024
   Oracle.ManagedDataAccess.Client.OracleConnection.Open() +3287
   ********.DAL.GetRequestorID(String currentUserEmail) in C:\Users\*****\Documents\Visual Studio 2015\Projects\Main\******\******\DAL.cs:181
   *******._Default.Page_Load(Object sender, EventArgs e) in C:\Users\*****\Documents\Visual Studio 2015\Projects\Main\******\********\Default.aspx.cs:21
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
   System.Web.UI.Control.OnLoad(EventArgs e) +95
   System.Web.UI.Control.LoadRecursive() +59
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +780


Что я уже пробовал:

Изменение поставщика oracle на поставщика ODAC.

Dave Kreskowiak

Покажите строку подключения. Вот где, вероятно, будет проблема, если он бросит на Конн.Открытый призыв.

Dave Kreskowiak

Появляются ли те имена "источников данных", которые вы выделили, в TNSNAMES.ORA?

UpATL

Источником данных является ip-адрес сервера
соединение не использует файл tns

Dave Kreskowiak

Если я чего-то не упущу, это не сработает. Дескриптор Oracle, который выглядит примерно так:

(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)))

любой из них должен быть в имени TNSNAME.Или файл с именем, которое ваш источник данных будет использовать для ссылки на него, или этот материал должен быть значением для источника данных. Например:
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));User Id=******;Password=**************

UpATL

Строка подключения, используемая для работы до
&ЛТ;добавить имя="******параметр connectionString" свойства connectionString="источник данных=имя_сервера/ЦТ;пароль=***;идентификатор пользователя=****" имя_поставщика="Оракул.ManagedDataAccess.Клиент" />

Dave Kreskowiak

Я не могу проверить это сам, но несколько лет назад нам пришлось поместить дескриптор Oracle в TNSNAMES.ORA и поместите идентификатор этого дескриптора в качестве источника данных в разделе web.config connectionStrings.

2 Ответов

Рейтинг:
0

Maciej Los

Распространенная причина вышеуказанной ошибки описана здесь: Система.ArgumentNullException: значение не может быть null.[^]


Рейтинг:
0

kijisky

У меня была такая же проблема с этим провайдером.
Причиной ошибки стала невозможность запуска архиватора.
Мое решение состояло в том, чтобы увеличить db_recovery_file_dest_size.

Oracle не отправляет некоторые параметры (с именем "AUTH_SC_*") во время "рукопожатия", если архиватор не работает, пока база данных находится в режиме архивирования. Некоторые из этих параметров слепо используются логикой драйвера ManagedDataAccess.

Это выглядит как забавное сочетание незначительных ошибок в OracleRDBMS и "управляемом"драйвере.

Видеть: ArgumentNullException (ключ paramname)