System.Runtime.InteropServices.ExternalException при вызове Oracle.DataAccess.Client.OracleConnection.Open()
У меня есть следующий код для подключения к базе данных с помощью ODP.net:
// connection information removed to protect sensitive information
string host = "******";
string sid = "*****";
string connectDescriptor = string.Format("(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST={0})(PORT=1521))(CONNECT_DATA=(SID={1})))", host, sid);
string username = "*****";
string password = "*****";
string connectionString = string.Format("Data Source={0};User ID={1};Password={2};", connectDescriptor, username, password);
OracleConnection conn = null;
try
{
conn = new OracleConnection(connectionString);
conn.Open();
}
catch (OracleException oraex)
{
MessageBox.Show(oraex.ErrorCode + ": " + oraex.Message);
}
finally
{
conn.Close();
}
Позвонить Open()
выдает ошибку, и я не могу многое понять по этому поводу. oraex.ErrorCode
является -2147467259
а также oraex.Message
является ""
, Попытка получить доступ к большинству членов брошенного исключения приводит к NullReferenceException
,
Кроме того, я вижу, что базовое исключение System.Runtime.InteropServices.ExternalException
,
Что здесь происходит? Из-за InteropServices
Исключение Я предполагаю, что это как-то связано с COM.
Дополнительная информация
- Я только что установил ODAC 12c.
- Информация о соединении проверена. Я могу подключиться к той же базе данных, используя приложение SilverLight, которое использует устаревшие
System.Data.OracleClient
, Они в порядке.
1 ответ
Похоже, это что-то с клиентом оракула. Я сталкивался с подобными проблемами с веб-проектами, в то время как консольные проекты работали просто отлично. Если вы установили 64-битный ODAC, полностью удалите его и попробуйте 32-битный. Также дважды проверьте целевую платформу в Visual Studio "32bit". Если это работает, вы можете найти, что не так с 64-битной установкой.