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

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

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

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

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

Рабочий экран приложения с портативного компьютера 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 или выше.

Экран ошибки портативного компьютера B

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


person mustafa-naeem    schedule 11.11.2018    source источник
comment
Нет, требуется не все клиентское программное обеспечение Oracle. Для подключения к вашему серверу требуется достаточно клиентского интерфейса Oracle. Сделайте так, как вас просит stacktrace - т.е. установите клиентский интерфейс oracle.   -  person shahkalpeshp    schedule 11.11.2018
comment
@shahkalpesh Я просто немного смущен, мне нужно просто установить клиентский интерфейс Oracle на ноутбук B, верно? не могли бы вы дать мне точную ссылку для скачивания? на веб-сайте oracle есть много ссылок для скачивания, и очень похоже на загрузку   -  person mustafa-naeem    schedule 11.11.2018
comment
Наличие двух компьютеров, подключенных к одному Wi-Fi, не означает, что у вас есть локальная сеть. Попробуйте выполнить эхо-запрос портативного компьютера A с портативного компьютера B с помощью команды ping 192.168.20.98 и сообщите нам, каков был результат.   -  person Pedro Gaspar    schedule 11.11.2018
comment
привет @PedroGaspar Я пингую от B к A и получаю 0% потери пакетов   -  person mustafa-naeem    schedule 11.11.2018
comment
Так что вам, вероятно, придется сделать то, что предложил @shahkalpesh, и установить только OracleClient на ноутбук B. Проблема в том, что System.Data.OracleClient является устаревший в течение некоторого времени, поэтому вам лучше использовать ODP.NET от самого Oracle. Ознакомьтесь с этой статьей о трехэтапной миграции.   -  person Pedro Gaspar    schedule 11.11.2018
comment
привет @PedroGaspar, спасибо за ответ --- заставит ли ODP.NET меня разработать приложение, которое может работать на ноутбуке B без необходимости установки OracleClient на нем? я видел видео на YouTube об этом, и это очень круто   -  person mustafa-naeem    schedule 12.11.2018
comment
На самом деле я никогда не работал с Oracle, OracleClient или ODP.NET, но, насколько я понимаю, да, ODP.NET будет заменять System.Data.OracleClient, и он вам больше не понадобится. Думаю, вам просто нужно установить ODP.NET, как и любую стороннюю библиотеку времени выполнения.   -  person Pedro Gaspar    schedule 12.11.2018
comment
@PedroGaspar благодарит вас за спасение жизни   -  person mustafa-naeem    schedule 12.11.2018
comment
@ mustafa987, узнал подробнее о проблеме, посмотрите мой ответ.   -  person Pedro Gaspar    schedule 12.11.2018


Ответы (1)


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

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

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

А также:

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

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

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

Примечание

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

Поэтому лучше использовать Oracle Data Provider для .NET (ODP. NET) вместо устаревшего System.Data.OracleClient. Здесь есть статья о трехэтапной миграции, которая поможет в процесс.

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

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

person Pedro Gaspar    schedule 12.11.2018
comment
привет @PedroGaspar, извините за поздний ответ, потому что я был занят просмотром множества руководств по программированию, однако я перешел на ODP.NET и могу сказать, что это очень приятно, тем не менее, большое спасибо за эту отличную информацию, которую вы мне предоставили - person mustafa-naeem; 10.12.2018