Ошибка соединения Oracle9i (ora-12154) в приложении.NET только на некоторых машинах
Я создал приложение.NET(4.6.1), которое подключается к базе данных Oracle9i. Это приложение отлично работает на компьютере, на котором я написал приложение, но не на компьютере, на котором необходимо установить приложение.
Я использую System.Data.OracleClient. Я понятия не имею, что может быть не так. Я проверил следующие вещи.
- На обеих машинах работает один и тот же клиент Oracle с одинаковой конфигурацией имен TNS. Эта конфигурация скопирована с компьютера разработчика, на котором она работает.
- Обе машины запрашивают правильный файл tnsnames.ora (проверено с помощью procmon).
- Обе машины могут нормально соединяться с SQLPlus.
- Обе машины тестируются с одной и той же активной учетной записью каталога.
- Обе машины имеют правильные имя пользователя и пароль для подключения.
- Я попробовал новую установку клиента oracle без успеха.
- Приложение работает в режиме 32 на обеих машинах.
- На обеих машинах установлена одинаковая версия Windows 7
Кто-нибудь знает, что еще может быть причиной этой проблемы?
Stacktrace ошибки:
2017-10-05 16:40:48.7203 - ERROR: System.Data.OracleClient.OracleException (0x80131938): ORA-12154: TNS:servicenaam kon niet worden herleid.
bij System.Data.OracleClient.OracleException.Check(OciErrorHandle errorHandle, Int32 rc)
bij System.Data.OracleClient.OracleInternalConnection.OpenOnLocalTransaction(String userName, String password, String serverName, Boolean integratedSecurity, Boolean unicode, Boolean omitOracleConnectionName)
bij System.Data.OracleClient.OracleInternalConnection..ctor(OracleConnectionString connectionOptions)
bij System.Data.OracleClient.OracleConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
bij System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
bij System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
bij System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
bij System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
bij System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
bij System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
bij System.Data.OracleClient.OracleConnection.Open()
bij QardPrint.Model.Locus.LocusFunctions.AddEmployee(Employee employee, String& errMsg)
1 ответ
Решение
Я наконец "решил" проблему. По какой-то причине соединение оракула не работает на целевой машине, если моя программа была установлена в Program Files(x86)
папка. Однако на моей машине разработки он работал в этой папке. Мне до сих пор неясно, почему это так. Если кто-то знает причину этого, пожалуйста, оставьте ответ.