我正在开发一个应该连接到任何OracleDB的.NET应用程序,但我有些困惑,试图使其在不同版本上运行。
我最初是从Oracle 11g(Express)开始的,尝试连接实际上相当容易,我只是使用了以下连接字符串就可以了:
Data Source=hostname:port;User Id=myUsername;Password=myPassword;
然后我尝试连接到12c,它告诉我我没有指定服务名称。这让我感到很困惑,因为我不必在11中指定服务名称,但我在网上查找并找到了以下格式的另一个连接字符串:
SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort))
(CONNECT_DATA=(SERVICE_NAME=MyOracleSID))); uid=myUsername; pwd=myPassword;
它仍然不起作用。一位同事给了我小费,建议他们使用“全局数据库名称”而不是SID(ORCL.domainname.local
而不是ORCL
),在我们将ORCL.domainname.local添加到域控制器的DNS服务器的转发中之后,该技巧就起作用了查找区域。
然后我回到11g那里做了同样的事情,但结果发现使用新的Connection String无效。
尽管我们可以在连接字符串生成器中(用户指定数据)实现某种“尝试直到起作用”功能,但这似乎是一个糟糕的解决方案,我认为这不是一个好主意。同样在这一点上,我们真的很想知道为什么,所以我们可以判断是配置问题还是绝对版本问题。
有人在乎给我一些见识吗?我特别想知道要使不同的数据源属性(TNSNAMES.ora样式,host:port / sid,host:port / fully.qualified.sid ...)工作需要做什么。