为了告诉 ODBC 驱动程序管理器要使用什么驱动程序,并告诉选定的驱动程序使用什么数据源,代码必须以连接字符串或 RemoteData 控件属性设置的形式提供若干参数。在绝大多数情况下,连接字符串用于将 RDO 指定到特定的服务器、数据库及其用户。
连接字符串中包括一系列的参数,互相之间用分号隔开,这些参数由 ODBC 接口定义,也包括 ODBC 驱动程序本身。就是说,所有的 ODBC 驱动程序都有特定的参数要求,因此必须参阅驱动程序所包含的文档以获取特定信息。该连接字符串将和所关联的 rdoEnvironment 对象的 hEnv 一道传递到 ODBC API 的 SQLDriverConnect 函数。
注意 如果要转换已有的 DAO 或 ODBCDirect 代码,必须从连接字符串的开头删除 ODBC 参数。另外 LOGINTIMEOUT 参数是不支持的,必须使用 rdoEnvironment 对象的 LoginTimeout 属性代替它。
通常,连接字符串包括以下参数,但是这些参数不是绝对必需的:
ODBC 连接字符串
ODBC 连接字符串参数 | 参数的意义 | ||
DSN= | 已注册的 ODBC 数据源名称。如果使用 DRIVER 关键字,则不用 DSN。 | ||
UID= | 建立于服务器上的用户名。在 SQL Server 中是登录名。 | ||
PWD= | 与登录名对应的密码。 | ||
DATABASE= | 所请求的缺省数据库(任选项)。 | ||
SERVER= | 数据源服务器的网络名称。在 Microsoft Windows NT 计算机上,"(local)" 可以作为服务器被输入。在这种情况下,可以使用 SQL Server 的本地副本。即便是非网络版本也可以。 | ||
DRIVER= | 数据源驱动程序的名称。Microsoft SQL Server 使用 {SQL Server。如果使用 DSN 关键字,则不用 DRIVER。 | ||
APP= | 应用程序名(任选的)。 | ||
WSID= | 工作站 ID。通常,这是应用程序所在的机器的网络名称(任选)。 | ||
LANGUAGE= | SQL Server 使用的国家/地区语言(任选)。 |
注意 以上这参数中有一些是特定于 SQL Server 的,对于 Oracle 或其它 ODBC 数据源,可能需要其它的必选参数或任选参数。
注意,连接字符串不包括设置以下选项的参数:
选项 | 缺省行为 |
网络地址 | 不需要,由服务器名称来处理。 |
网络协议 | 缺省为 SQL Server 驱动程序中的命名管道。 |
OEMTOANSI 开关 | 缺省为 "Off" |
使用信任连接选项 | 缺省为 "Off" |
为预备语句产生存储过程 | 缺省为 "Off" |
所有这些选项都属于驱动程序选项,它们都在 Windows 控制面板中的“数据源名称”对话框中设置。除非使用 DSN 来建立连接,否则必须接受每个参数的缺省值设置。
为了能够访问绝大多数的 ODBC 数据源,必须提供一个有效的用户 ID 以及相应的密码。这些值最初由系统管理员注册,但应用程序可以修改他们。通过设置 OpenConnection 或 EstablishConnection 方法的适当的提示参数,就可以很简单地提示用户输入这些值。但是,这种方法经常会导致安全性方面的问题,因为用户可以通过无数次的尝试猜出正确的用户 ID 及密码。
另一种方法是使用应用程序的特殊用户 ID 和密码。这种方法隐含了这样的假定:只有能够访问数据源或工作站的用户才能够访问应用程序。
如果选用域管理安全机制,那么必须将 OpenConnection 或EstablishConnection 方法的 connect 参数中的 UID 和 PWD 保留为空的。这种类型的安全机制将 Windows NT 登录 ID 及密码传递到数据源。这些值是在用户登录到 Windows 95 或 Windows NT 时获取的。如果系统管理员实现了集成的或混合的安全机制,那么,如果用户被授予访问数据源的权限,那么这种方法将允许她登录到数据源。例如,在前面的例子中,域管理安全机制的 connect 参数设置如下:
Conn$ = "DSN=MyRemote;UID=;PWD=;"
与 rdoConnection 对象关联的数据库最初由 DATABASE 连接字符串参数决定。如果没有提供这个串,那么用户的缺省数据库将由服务器管理员分派,或者由 DSN 指定的。
在连接完成之后,也可以通过执行 Transact SQL (TSQL) USE database
查询来改变缺省数据库。无论在什么情况下,都必须具有访问被选定数据库的权限,否则将会引发可以捕获的错误。
例如,以下代码将缺省数据库改为 cn 连接上的 "Pubs":
cn.Execute "Use Pubs"
一旦完成,连接字符串作为以下各项之一传递:
为了将这些信息传递到 RDO,RemoteData 控件提供若干专门属性,但是,如果连接字符串作为 RemoteData 控件的 Connect 属性传递,那么就不需要额外的属性。连接字符串提供的值的优先级高于 RemoteData 控件属性中提供的值。