Низ за връзка в ODP.Net

Първоначално използвах доставчик oraoledb.oracle, за да се свържа с базата данни на Oracle и беше лесно да изградя низ за връзка:

Доставчик=OraOLEDB.Oracle;Потребителски идентификатор=myId;Парола=myPassword;Източник на данни=data.customer.com

и всичко работи както се очакваше, но в момента преминах към ODP.Net, за да се отърва от инсталирането на oracle клиент и получавам грешка ORA-12154: TNS:could not resolve the connect identifier specified със следния низ за връзка:

Източник на данни=data.customer.com;Потребителски идентификатор=myId;Парола=myPassword

Може ли някой да ми каже къде съм направил грешка?


person ChernikovP    schedule 10.12.2014    source източник
comment
И data.customer.com е в tnsnames.ora за конкретния дом, през който преминавате (проверете битовете)?   -  person Patrick Hofman    schedule 10.12.2014
comment
Също така, използвате ли управляваната ODP.NET или неуправляваната версия?   -  person Patrick Hofman    schedule 10.12.2014
comment
@Patrick Hofman, да, използвам управляван ODP.NET и за съжаление не можах да проверя файла tnsnames.ora, защото нямам достъп до този сървър. Всичко, което знам, е това „data.customer.com“   -  person ChernikovP    schedule 10.12.2014
comment
Управляваният ODP.NET не работи с tnsnames.ora. Това е проблема.   -  person Patrick Hofman    schedule 10.12.2014
comment
@Patrick Hofman, а неуправляемият ODP.NET изисква инсталиране на Oracle клиент, прав ли съм?   -  person ChernikovP    schedule 10.12.2014
comment
Вярно. Този поддържа tnsnames.ora. Но е трудно да го накараш да работи.   -  person Patrick Hofman    schedule 10.12.2014
comment
@Patrick Hofman, благодаря много за помощта! Предполагам, че е време да поговорим с клиентите=)   -  person ChernikovP    schedule 10.12.2014
comment
Няма проблем. Добавих го като отговор, тъй като коментарите може да бъдат изтрити с времето.   -  person Patrick Hofman    schedule 10.12.2014
comment
Корекция на горното: ODP.NET, управляваният драйвер НЕ поддържа TNSNAMES.ORA. Вижте дискусията в отговорите по-долу.   -  person Christian Shay    schedule 12.12.2014
comment
connectionstrings.com/oracle е добра препратка.   -  person vapcguy    schedule 22.06.2016


Отговори (4)


Управляваният ODP.NET работи с tnsnames.ora, но се нуждае от допълнителна конфигурация, за да работи. Това си е твой проблем. Опитвате се да използвате име от вашия tnsnames.ora, което работи само когато зададете променливата на средата TNS_ADMIN или секцията за конфигурация във вашия machine.config, Web.config или приложение. конфиг. Друг вариант да можете да използвате tnsnames.ora е към неуправляемия ODP.NET драйвер, което според мен е трудно да се използва.

Опитайте се да използвате EZCONNECT имена, които са поддържани от управляваните и неуправляем драйвер без необходимост от файл tnsnames.ora или друга конфигурация.

person Patrick Hofman    schedule 10.12.2014
comment
НЕ е вярно, че ODP.NET, управляваният драйвер не работи с TNSNAMES.ORA. Това е така, но се взема от променливата TNS_ADMIN, която е зададена по подразбиране в machine.config от инсталатора (или можете да я зададете във вашето приложение или уеб конфигурация). Можете също така да поставите TNSANAMES.ORA в работната директория на изпълнимия файл и ако вече не сте задали цели TNS във вашия конфигурационен файл, той ще бъде взет. - person Christian Shay; 11.12.2014
comment
@Chr: ти противоречиш на собствения си отговор: stackoverflow.com/a/26672511/993547 - person Patrick Hofman; 11.12.2014
comment
Тази публикация, която споменахте, беше въпрос относно поддържането на параметъра IFILE вътре в TNSNAMES.ORA. Не казвам, че не поддържаме TNSNAMES.ORA. Каза, че не поддържаме IFILE в TNSNAMES.ORA, когато използваме ODP.NET, управляван драйвер. - person Christian Shay; 12.12.2014
comment
@Chr: съгласен съм. Можете ли да проверите дали коригираната публикация е точна? - person Patrick Hofman; 12.12.2014
comment
Не, това не е правилно. Управляваният ODP.NET наистина работи с TNSNAMES.ORA. Можете или да го посочите с помощта на TNS_ADMIN, или (ако не поставите псевдоними във вашата машина/app.config, което ще има предимство) можете да го поставите в работната директория на изпълнимия файл. - person Christian Shay; 12.12.2014
comment
@Chr: значи трябва да изведете файла tnsnames.ora в exe матрицата? - person Patrick Hofman; 12.12.2014
comment
Да, в работната директория exe или в местоположението, посочено от TNS_ADMIN (което може да бъде зададено в app/web/machine.config.). По подразбиране инсталаторът ще зададе TNS_ADMIN за вас в machine.config и ще сочи към ‹HOME›/NETWORK/ADMIN на дома, където е инсталиран ODP.NET. - person Christian Shay; 12.12.2014
comment
@ChristianShay: Но управляваният драйвер е само zip, не е инсталиран. Кое home/network/admin отнема тогава? - person Patrick Hofman; 12.12.2014
comment
Вярно е, ако просто изтеглите самата dll, тогава да, трябва да извършите конфигурацията сами, включително да зададете стойността TNS_ADMIN където и да поставите TNSNAMES.ORA, да преместите TNSNAMES.ORA в работната директория или да настроите псевдоними за свързване във вашия конфигурационен файл. Ако обаче не сте в сценарий за внедряване, можете да изтеглите инсталационната му версия и това ще направи повече за вас. Ще трябва да използвате инсталатора, ако работите по време на проектиране с Entity Framework Designers. oracle.com/technetwork/topics/dotnet/downloads/index.html - person Christian Shay; 12.12.2014
comment
Моля, коригирайте отговора си, за да премахнете Управляваният ODP.NET не работи с tnsnames.ora. - person Christian Shay; 12.12.2014
comment
@Chr: Направих го. Моля, прегледайте публикацията. Чувствайте се свободни да го редактирате, за да го подобрите. - person Patrick Hofman; 13.12.2014

Лично аз предпочитам да не завися от дефинирани tnsnames.ora на машина. Използвайки по-дълъг низ за свързване (вижте примера по-долу), можете да разгърнете програмата си, без да мислите за tnsnames.ora, който може да не съществува в целевата система.

Пример за използване на ODP.NET без tnsnames.ora:

Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));
User Id=myUsername;Password=myPassword;

Вижте също.

person ialekseev    schedule 10.12.2014
comment
Използването на EZ config формат е по-лесно от това, ако предпочитате да вградите всички подробности в низа за свързване. Например: Data Source=MyHost:MyPort/MyOracleService;User Id=myUsername;Password=myPassword; - person Christian Shay; 11.12.2014

Наскоро се осмелих да тръгна по този път, само за да се сблъскам с проблеми с 32x/64x, когато стартирам опит за стартиране на уеб сайт с помощта на ODP.net.

Ето моя работен низ за връзка: Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ip/server)(PORT=port)))(CONNECT_DATA=(SERVER=DEDICATED)(SID=service_id)));User Id=user_id;Password=p_word"

РЕДАКТИРАНЕ: По дяволите, @ialekseev е твърде бърз..

person kevvy_dawg    schedule 10.12.2014

Копирайте TNSNAMES.ORA, който съдържа data.customer.com във вашата директория {ODP.NET ORACLE HOME}/NETWORK/ADMIN, ако сте използвали инсталатора на Oracle за инсталиране на ODP.NET и трябва да работи, защото инсталаторът задава променливата TNS_ADMIN в machine.config, (за управляван ODP.NET).

Можете също да използвате синтаксиса на низа за свързване на SQLNET EZ Config, ако искате да се справите напълно без записа TNSNAMES.ORA.

Например: Data Source=MyHost:MyPort/MyOracleService;User Id=myUsername;Password=myPassword;

person Christian Shay    schedule 11.12.2014
comment
Можете също така просто да създадете променливата на околната среда TNS_ADMIN и да създадете стойност на низ в регистъра TNS_ADMIN в HKLM\Software\Oracle\KEY_OraClient11ghome1, и двете със стойността на пътя на папката, където ще запазите tnsnames.ora, която трябва да бъде {ORACLE HOME}/NETWORK/ADMIN. както е казано. - person vapcguy; 22.06.2016
comment
@vapcguy Оказва се, че оригиналният плакат използва управляван ODP.NET, който не поддържа записи в системния регистър, нито променливи на средата. - person Christian Shay; 28.06.2016
comment
Хм, това е, което използвам и аз и трябваше да внедря, включително променливите на средата, за да накарам моите да работят. Получаваше грешки без тях и затова го споменах. Може да искате да прочетете отново приетия отговор отново, защото той дори посочва къде трябва да се намери TNS_ADMIN - или machine.config, както посочвате (въпреки че не мога да гарантирам за него), но също така може да бъде променливи на средата и регистър (Oracle се нуждае от записа в системния регистър - не .NET) или web.config (което също не опитах). - person vapcguy; 28.06.2016