65.9K
CodeProject 正在变化。 阅读更多。
Home

无需 tnsnames.ora 即可访问 Oracle

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.90/5 (14投票s)

2005年11月4日

2分钟阅读

viewsIcon

231515

downloadIcon

1622

如何在不使用 tnsnames.ora 的情况下访问 Oracle。

DOS box

引言

你是否尝试过从 VBScript 访问 Oracle 实例? 这并不太复杂,但通常你需要一个名为 tnsnames.ora 的额外文件,位于 Oracle 安装目录中。 本文介绍了一种无需此文件即可访问 Oracle 实例的简单方法。 你所需要做的就是使用不同的连接字符串。

使用代码

你可以从 VBScript、VBA 和 Visual Basic 使用这种连接字符串。 我还用 Perl 测试过,它也有效。 使用不需要在你的计算机上拥有正确的 tnsname.ora 的连接字符串,对于在许多不同的数据库实例上进行临时脚本编写,或者当你无法确定用户是否在其计算机上拥有正确的 tnsnames.ora 时,尤其有用。

首先,让我们看一下 VBScript 文件中用于 Oracle 的标准连接字符串

Dim strCon
strCon = "Driver={Microsoft ODBC for Oracle}; " & _
         "CONNECTSTRING=MYDB; uid=read;pwd=read;"

你看到在第一部分是驱动程序名称(Oracle 的 Microsoft ODBC),然后是实例的别名,最后是 Oracle 用户名和密码。 别名 MYDB 也需要在 tnsnames.ora 文件中有一个对应的条目。 你通常会在以下目录中找到此文件:<Oracle-Home>\network\admin。 在此文件中,你需要定义别名

MYDB.WORLD =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = mysrv)(PORT = 7001))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = MYDB)
    )
  )

Oracle 使用此定义来确定与给定别名 MYDB 关联的物理数据库实例。 这就是为什么当我们访问 Oracle 实例时需要 tnsnames.ora 文件。 但这是必要的吗? 实际上并非如此! 你所需要做的就是:在你的连接字符串中包含物理连接数据(如主机和端口)。 这是 VBScript 中修改后的连接字符串

Dim strCon
strCon = "Driver={Microsoft ODBC for Oracle}; " & _
         "CONNECTSTRING=(DESCRIPTION=" & _
         "(ADDRESS=(PROTOCOL=TCP)" & _
         "(HOST=mysrv)(PORT=7001))" & _
         "(CONNECT_DATA=(SERVICE_NAME=MYDB))); uid=read;pwd=read;"

现在你将能够访问每个 Oracle 实例,而无需在客户端机器上拥有正确的 tnsnames.ora。 最后,这是选择一些行并将它们写入 STDOUT 的完整源代码

Dim strCon
strCon = "Driver={Microsoft ODBC for Oracle}; " & _
         "CONNECTSTRING=(DESCRIPTION=" & _
         "(ADDRESS=(PROTOCOL=TCP)" & _
         "(HOST=mysrv)(PORT=7001))" & _
         "(CONNECT_DATA=(SERVICE_NAME=MYDB))); uid=read;pwd=read;"

Dim oCon: Set oCon = WScript.CreateObject("ADODB.Connection")
Dim oRs: Set oRs = WScript.CreateObject("ADODB.Recordset")
oCon.Open strCon
Set oRs = oCon.Execute("SELECT myfield FROM mytable)
While Not oRs.EOF
    WSCript.Echo oRs.Fields(0).Value
    oRs.MoveNext
Wend
oCon.Close
Set oRs = Nothing
Set oCon = Nothing

我希望这篇文章对你有所帮助。 对于我来说,当我不确定最终用户是否在其计算机上拥有正确的 tnsnames.ora 时,这种连接字符串很有用。

© . All rights reserved.