VB.NET: невозможно подключиться к серверу базы данных Oracle из клиентского приложения - PullRequest
0 голосов
/ 11 ноября 2018

У меня 2 ноутбука (A и B) в одной локальной сети (Wi-Fi).

Я установил базу данных Oracle 12c r2 на ноутбук A.

На ноутбуке A я создал приложение VB.NET с Visual Studio 2017, которое может подключаться к базе данных Oracle.

Приложение отлично работает на ноутбуке А. Оно подключается к базе данных, и это форма моего приложения и строка подключения, которую я использую (192.168.20.98 - это мой ноутбук IP-адрес):

App working screen, from laptop A

oracle_connection = New OracleConnection(
    "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=" & protocol.Text &
    ")(HOST=" & host.Text & ")(PORT=" & port.Text &
    ")))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=" & db_name.Text &
    ")));User Id=" & user_id.Text & ";Password=" & pswd.Text)

Я также отредактировал мои listener.ora и tnsnames.ora, расположенные в C:\app\mustafa\product\12.2.0\dbhome_1\network\admin следующим образом:

listener.ora

# listener.ora Network Configuration File: 
C:\app\mustafa\product\12.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\mustafa\product\12.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = 
"EXTPROC_DLLS=ONLY:C:\app\mustafa\product\12.2.0\dbhome_1\bin\oraclr12.dll")
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.98)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)

tnsnames.ora:

# tnsnames.ora Network Configuration File: 
C:\app\mustafa\product\12.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

DB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.98)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db1)
)
)

LISTENER_DB1 =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.98)(PORT = 1521))


ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)

Я изменил разрешение своей домашней папки Oracle, чтобы предоставить authenticated users полный доступ.

Поэтому, когда я перемещаю свое приложение на ноутбук B и запускаю его для подключения к базе данных на ноутбуке A, я получаю эту ошибку:

System.Data.OracleClient требует клиентского программного обеспечения Oracle версии 8.1.7 или выше.

Error screen from laptop B

Я не могу найти никакого решения. Требуется ли установка базы данных Oracle 12c r2 на мой ноутбук B?

1 Ответ

0 голосов
/ 12 ноября 2018

Пространство имен System.Data.OracleClient является провайдером данных .NET Framework для Oracle, но для него все же требуется программное обеспечение Oracle Client, установленное на целевом компьютере:

Oracle и ADO.NET | Документы Microsoft

Поставщик данных .NET Framework для Oracle предоставляет доступ к базе данных Oracle с помощью интерфейса вызова Oracle (OCI), как это предусмотрено Oracle Client .

И

Поставщики данных .NET Framework | Документы Microsoft

Для источников данных Oracle. Поставщик данных .NET Framework для Oracle поддерживает клиентское программное обеспечение Oracle версии 8.1.7 и более поздних версий и использует пространство имен System.Data.OracleClient.

Но, как указано в документации также:

Примечание

Типы в System.Data.OracleClient устарели . Типы остаются поддерживаемыми в текущей версии .NET Framework, но будет удалено в следующем выпуске . Microsoft рекомендует использовать стороннего поставщика Oracle.

Поэтому вместо устаревшего System.Data.OracleClient лучше использовать Oracle Data Provider для .NET (ODP.NET) . Вот статья о миграции 3 шага , чтобы помочь в процессе.

В любом случае поставщикам данных Microsoft или Oracle по-прежнему требуется программное обеспечение Oracle Client, установленное на целевом компьютере. Программное обеспечение Oracle Client называется Oracle Instant Client и может быть найдено здесь .

Если на целевом компьютере уже установлен Oracle Instant Client, вы можете попробовать один из них (что, я думаю, автор вопроса уже сделал):

...