#c# #sql #.net #oracle #database-administration
#c# #sql #.net #Oracle #администрирование базы данных
Вопрос:
У меня есть C # ASP.Net Веб-приложение MVC. Я пытаюсь успешно подключиться к базе данных Oracle. Я получаю сообщение об ошибке «ORA-12514: TNS: слушатель в настоящее время не знает об услуге, запрошенной в дескрипторе подключения». У меня нет доступа к серверу, на котором находится база данных. Но у меня есть доступ к Oracle SQL Developer, который я установил на своем компьютере.
В моем коде C # я устанавливаю строку подключения следующим образом:
ConnectionString = "DataSource=XXX.XX.XXX.XXX/abcd,1521;User ID=userid;Password=password;";
abcd должно быть именем службы. а 1521 — это номер порта.
Я понимаю, что моя строка подключения не может быть причиной ошибки, но я хочу ее исключить. Кроме того, я знаю, что более правильный способ сделать что-то — это, вероятно, установить строку подключения в web.config и извлекать ее по мере необходимости, но я делаю это таким образом только для удобства тестирования, пока не буду уверен, что могу успешно подключиться к базе данных.
Что для меня странно, так это то, что я смог подключиться к базе данных с помощью Oracle SQL Developer, используя тот же IP-адрес, номер порта, имя службы, имя пользователя и пароль, которые я использую в своей строке подключения.
Прежде всего, я хотел бы получить информацию о том, выглядит ли моя строка подключения допустимой. Если у вас есть дополнительные соображения о том, в чем может быть проблема, это также будет оценено.
использование этой команды в Oracle SQL Developer: select sys_context('userenv','service_name') from dual;
Я могу определить, что имя службы, которое я использую в своей строке подключения, существует, хотя, я думаю, это не гарантирует, что служба запущена. Я ни в коем случае не администратор базы данных. На самом деле, я все еще новичок.Сетевая и веб-разработка в целом, но мне было поручено устранить эту проблему. Любая помощь приветствуется.
Комментарии:
1. Совет для вас: создайте новый текстовый файл на рабочем столе и переименуйте его в
a.udl
, дважды щелкните его, чтобы увидеть знакомое диалоговое окно подключения к данным, измените поставщика на oracle, установите все настройки, протестируйте его, сохраните, затем назовите его обратноa.txt
и откройте в блокноте; это вашстрока подключения2. @CaiusJard Большое спасибо за совет. Однако у меня нет Oracle в списке поставщиков. Приложение, которое оно выбрало по умолчанию для открытия файла .udl, — это OLE DB Core Services . Какое приложение я должен использовать для открытия URL-адреса? Я попытался выбрать sqldeveloper.exe из моих загрузок, но это просто запускает Oracle SQL Devleloper.
3. Тьфу.. Возможно, проблема с драйвером — OLE DB COre Services — правильное приложение. Вместо этого попробуйте этот аналогичный совет: добавьте новый набор данных в свой проект, откройте его, щелкните правой кнопкой мыши в любом месте surface и добавьте табличный адаптер. Создайте новую строку подключения, заполните диалоговое окно для Oracle, протестируйте, сохраните.. Строка подключения будет сохранена в настройках вашего приложения, когда вы завершите работу мастера (просто запустите запрос, как
select * from dual
в . Мне было бы интересно узнать, показывает ли это ваш драйвер oracle, когда другой совет этого не сделал
Ответ №1:
Я не помню, чтобы видел следующий формат
DataSource=XXX.XX.XXX.XXX/abcd,1521
как действительный (что не означает, что его нет, я просто его не видел).
Наиболее распространенные из них, которые я видел::
DataSource=XXX
где XXX — это ссылка на ваш файл tnsnames.ora
DataSource=//nnn.nnn.nnn.nnn/service_name
DataSource=//nnn.nnn.nnn.nnn:port/service_name
Так что, возможно, попробуйте эти варианты и посмотрите, как вы идете. Существует также более точный список альтернатив на https://www.c-sharpcorner.com/UploadFile/nipuntomar/connection-strings-for-oracle /
Ответ №2:
В итоге я понял это. Я не думаю, что мой формат строки подключения был правильным. Я изменил его на:
ConnectionString = "DataSource=XXX.XX.XXX.XXX/abcd;User ID=userid;Password=password;";
В принципе, я просто убрал номер порта. В моем случае порт по умолчанию был тем, что мне все равно было нужно. Не уверен, что бы я сделал, если бы мне нужно было указать номер порта.
Ответ №3:
Будучи новичком в Oracle, я несколько дней пытался найти решение этой проблемы. эта статья мне очень помогла
Начиная с Oracle 21 c
Это моя строка подключения для C#
Password=dev;Persist Security Info=True;User ID=Dev;Data Source=localhost:1521/XEPDB1
Имейте в виду, что Dev — это имя пользователя, которое также является именем схемы для Oracle