Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用LDAP为ORACLE设置C#连接字符串以指定数据库?_C#_.net_Oracle_Ldap - Fatal编程技术网

如何使用LDAP为ORACLE设置C#连接字符串以指定数据库?

如何使用LDAP为ORACLE设置C#连接字符串以指定数据库?,c#,.net,oracle,ldap,C#,.net,Oracle,Ldap,我有一个到Oracle数据库的连接字符串,如下所示: Data Source=myserver:1521/myservice;User ID=MY_SCHEMA;Password=mypassword Data Source=MYLDAPENTRY;User ID=MY_SCHEMA;Password=mypassword 我知道这基本上是一种没有TNS的方式来指定我们正在连接的数据库。 它可以工作,但通常我们引用LDAP中指定的数据库。如果数据库被移动到一个新的位置,我们只需要更新LDAP

我有一个到Oracle数据库的连接字符串,如下所示:

Data Source=myserver:1521/myservice;User ID=MY_SCHEMA;Password=mypassword
Data Source=MYLDAPENTRY;User ID=MY_SCHEMA;Password=mypassword
我知道这基本上是一种没有TNS的方式来指定我们正在连接的数据库。 它可以工作,但通常我们引用LDAP中指定的数据库。如果数据库被移动到一个新的位置,我们只需要更新LDAP条目就特别有用了。我试过这样做:

Data Source=myserver:1521/myservice;User ID=MY_SCHEMA;Password=mypassword
Data Source=MYLDAPENTRY;User ID=MY_SCHEMA;Password=mypassword
然而,当我尝试以这种方式连接时,我得到了一个

ORA-12154: TNS:could not resolve the connect identifier specified
我喝了一大口酒,就又回来了

Used LDAP adapter to resolve the alias
Attempting to contact (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=myserver)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME=myservice)))
OK (140 msec)
这与我能够工作的TNS-less连接相匹配

在同一服务器/工作站上连接SQLPLUS可以正常工作:

sqlplus MY_SCHEMA/mypassword@MYLDAPENTRY 
如果出现错误,我希望它默认搜索TNSNames.ora,而不是查询LDAP.ora并查询指定的LDAP服务器

在处理LDAP服务器时是否有不同的方法来指定它;或者我必须在OPT.NET中配置什么?

这给了我一个线索

我使用的是ODP.Net托管驱动程序。它不会读取TNS_ADMIN环境变量或等效的注册表项。因此,您有两个选项来解决此问题:

[1] 您可以在一个.config文件(例如app.config、web.config和machine.config)中指定TNS_ADMIN值


您的里程数可能因服务器或工作站上安装Oracle客户端的位置而异(我知道路径可能因我的商店中安装的版本而异)

[2] 您可以直接指定LDAP服务器的位置

<oracle.manageddataaccess.client>
    <version number="*">
        <LDAPsettings>
            <LDAPsetting name="DIRECTORY_TYPE" value="AD" />
            <LDAPsetting name="DEFAULT_ADMIN_CONTEXT" value="DC=ad,DC=myDomain,DC=myTLD"/>
            <LDAPsetting name="DIRECTORY_SERVERS" value="(ad.myDomain.myTLD:PORTNUMBER)"/>
            <LDAPsetting name="DIRECTORY_SERVER_TYPE" value="AD"/>
        </LDAPsettings>
        <settings>
            <setting name="NAMES.DIRECTORY_PATH" value="(LDAP)"/>
            <setting name="NAMES.DEFAULT_DOMAIN" value="ad.myDomain.myTLD"/>
        </settings>
    </version>
</oracle.manageddataaccess.client>


在我的情况下,在服务器/工作站之间或随着时间的推移,随着服务器的更换,这种情况发生变化的可能性要小得多。

请看这里-您可以使用sqlplus连接到数据库吗?sqlplus我的_模式/mypassword@MYLDAPENTRY@老程序员-事实上,在我来到StackOverflow之前,我就从那里开始了(这不是我第一次参加竞技表演)。@scottyu我完全可以通过sqlplus那样连接。你是否检查listener.log并检查c#尝试连接到listener的内容?