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

无需 tnsnames.ora 文件即可访问 Oracle

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.54/5 (12投票s)

2005年10月25日

CPOL

2分钟阅读

viewsIcon

101742

downloadIcon

666

无需 tnsnames.ora 文件即可访问 Oracle

Sample image

引言

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

Using the Code

你可以在 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;"

你看到第一部分是驱动程序名称(Microsoft ODBC for Oracle),然后是实例的别名,最后是 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;"

现在,你将能够在无需在客户端机器上拥有正确的 tnsnames.ora 文件的情况下访问每个 Oracle 实例。最后,这是选择一些行并将它们写入 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 文件时派上了用场。

历史

  • 2005年10月25日:初始发布
© . All rights reserved.