选择数据源或驱动程序

应用程序使用的数据源或驱动程序有时会在应用程序中进行硬编码。 例如,MIS 部门编写的用于将数据从一个数据源传输到另一个数据源的自定义应用程序将包含这些数据源的名称,该应用程序根本无法与任何其他数据源一起使用。 另一个示例是垂直应用程序,例如订单条目使用的应用程序。 此类应用程序始终使用相同数据源,该数据源具有应用程序已知的预定义架构。

其他应用程序会在运行时间选择数据源或驱动程序。 通常,这些是执行即席查询的泛型应用程序,例如使用 ODBC 导入数据的电子表格。 此类应用程序通常会列出可用的数据源或驱动程序,并让用户选择要使用的数据源或驱动程序。 泛型应用程序是列出数据源、驱动程序还是两者通常取决于应用程序是使用基于 DBMS 还是基于文件的驱动程序。

基于 DBMS 的驱动程序通常需要一组复杂的连接信息,例如网络地址、网络协议、数据库名称等。 数据源的目的是隐藏所有这些信息。 因此,数据源范例适合与基于 DBMS 的驱动程序一起使用。 应用程序可通过以下两种方式之一向用户显示数据源列表。 它可以使用 DSN(数据源名称)关键字调用 SQLDriverConnect,并且没有关联的值;驱动程序管理器将显示数据源名称列表。 如果应用程序希望控制列表外观,它可调用 SQLDataSources 来检索可用数据源列表并构造其自己的对话框。 此函数由驱动程序管理器执行,可在加载任何驱动程序之前调用。 然后,应用程序会调用连接函数,并向其传递所选数据源的名称。

如果未指定数据源,则使用系统信息指示的默认数据源。 (有关详细信息,请参阅默认子项。)如果使用找不到的 ServerName 参数调用 SQLConnect,则为空指针或为“DEFAULT”,驱动程序管理器将连接到默认数据源。 如果在调用 SQLDriverConnectSQLBrowseConnect 时使用的连接字符串包含设置为“DEFAULT”的 DSN 关键字,或者找不到指定数据源,则也会使用默认数据源。 此外,如果在调用 SQLDriverConnect 时使用的连接字符串不包含 DSN 关键字,也会使用默认数据源。

使用基于文件的驱动程序时,可以使用文件范例。 对于存储在本地计算机上的数据,用户通常明白其数据位于特定文件中,例如 Employee.dbf。 对于此类用户而言,选择他们知道的文件更简单,而非选择未知数据源。 为了执行此操作,应用程序首先调用 SQLDrivers。 此函数由驱动程序管理器执行,可在加载任何驱动程序之前调用。 SQLDrivers 会返回可用驱动程序列表;它还返回 FileUsageFileExtns 关键字的值。 FileUsage 关键字解释基于文件的驱动程序是像 Xbase 那样将文件视为表,还是像 Microsoft Access 那样将文件视为数据库。 FileExtns 关键字列出了驱动程序可识别的文件扩展名,例如 Xbase 驱动程序的 .dbf。 应用程序会使用此信息来构造一个对话框,用户通过该对话框可选择文件。 依据所选文件的扩展名,应用程序会使用 DRIVER 关键字来调用 SQLDriverConnect

没有什么可阻止应用程序将数据源与基于文件的驱动程序一起使用,或者使用 DRIVER 关键字来调用 SQLDriverConnect 以连接到基于 DBMS 的驱动程序。 下面是基于 DBMS 的驱动程序的 DRIVER 关键字的几个常见用法:

  • 未创建数据源。 例如,自定义应用程序可能使用特定驱动程序和数据库。 如果在应用程序中硬编码了连接到数据库时所需的驱动程序名称和所有信息,则用户无需在其电脑上创建数据源即可运行该应用程序。 他们只需安装应用程序和驱动程序。

    此方法的缺点是,如果连接信息更改,则必须重新编译和重新分发应用程序。 如果数据源名称在应用程序中经过硬编码而非完整的连接信息,则每个用户只能更改数据源中的信息。

  • 一次访问特定 DBMS。 例如,通过调用 ODBC 函数来检索数据的电子表格可能包含用于标识特定驱动程序的 DRIVER 关键字。 由于驱动程序名称对于拥有该驱动程序的任何用户都有意义,因此可以在这些用户之间传递电子表格。 如果电子表格包含数据源名称,则每个用户必须创建相同的数据源才能使用该电子表格。

  • 在系统中浏览特定驱动程序可访问的所有数据库。 有关详细信息,请参阅本节后面的“使用 SQLBrowseConnect 进行连接”。