Не анализируйте его. Просто спросите.
import socket
try:
socket.inet_aton(addr)
# legal
except socket.error:
# Not legal
Я изучил эту проблему подробнее, и вам просто нужно получить все соответствующие DLL из той же загруженной версии ODP.Net и поместите их в ту же папку, что и ваш Exe-файл, потому что ODP.Net старается не смешивать номера версий,это проблема, с которой вы столкнулись (либо он, либо oci.dll полностью отсутствует, и в этом случае он досадно выдает ту же ошибку).
Я объяснил, как это сделать здесь: http: / /splinter.com.au/using-the-new-odpnet-to-access-oracle-from-c Вот суть этого:
Вы создали и успешно протестировали соединение с помощью администратора ODBC в своей клиентской системе?
Существует исправление для проблемы с разрешениями в клиенте 9i и 10g, которая приводит к этой ошибке . Если вы используете 10.2.0.1, вам может потребоваться обновление до 10.2.0.3, чтобы решить эту проблему.
Я столкнулся с той же проблемой. Если на вашем компьютере установлен клиент 11g, вам необходимо использовать 11g ODP.Net DLL. Мне пришлось полностью удалить все, а затем установить клиент 11g, а затем драйверы ODP.NET 11g. Драйверы устанавливаются в GAC, и это становится своего рода головной болью.
* Обратите внимание: мой администратор баз данных понял, что это работает, только если вам не нужно подключаться к любой версии ниже 9i *
Нам пришлось сделать это и на наших серверах.
HTH
Что ж, я заставил свое приложение использовать соединение Ole DB (пространство имен System.Data.Oledb), и оно отлично работает. Учитывая, что приложение - это всего лишь интерфейс для вызова Oracle SP, и значения не возвращаются, я думаю, что этот подход приемлем, потому что за 2 дня, которые я потратил, пытаясь найти решение этой проблемы, я мог бы выполнить много больше разработки в приложении. Я все еще открыт для ответов, так как могу узнать, какую ошибку я совершаю для таких приложений в будущем.