数据源:以编程方式配置 ODBC 数据源

本主题介绍如何以编程方式配置开放式数据库连接 (ODBC) 数据源名称。 这样可以灵活地访问数据,而无需强制用户显式使用 ODBC 管理器或其他程序来指定数据源的名称。

通常,如果关联的数据库管理系统 (DBMS) 支持运行 ODBC 管理器来创建数据源,则用户就会采用这种操作方法。

通过 ODBC 管理器创建 Microsoft Access ODBC 数据源时,有两种选择:可以选择现有的 .mdb 文件,或创建新的 .mdb 文件。 无法以编程方式从 MFC ODBC 应用程序创建 .mdb 文件。 因此,如果应用程序要求将数据放入 Microsoft Access 数据源(.mdb 文件),则你很可能希望有一个可以在需要时使用或复制的空 .mdb 文件。

但是,许多 DBMS 允许以编程方式创建数据源。 某些数据源维护数据库的目录规范。 也就是说,一个目录是数据源,数据源中的每个表存储在单独的文件中(在 dBASE 中,每个表是一个 .dbf 文件)。 其他 ODBC 数据库(例如 Microsoft Access 和 SQL Server)的驱动程序要求在建立数据源之前满足一些特定的条件。 例如,在使用 SQL Server ODBC 驱动程序时,需要事先建立一个 SQL Server 计算机。

SQLConfigDataSource 示例

以下示例使用 ::SQLConfigDataSource ODBC API 函数创建名为“New Excel Data Source”的新 Excel 数据源:

SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Excel Files (*.xls)",
                   "DSN=New Excel Data Source\0"
                   "Description=New Excel Data Source\0"
                   "FileType=Excel\0"
                   "DataDirectory=C:\\EXCELDIR\0"
                   "MaxScanRows=20\0");

请注意,数据源其实是一个目录 (C:\EXCELDIR);该目录必须存在。 Excel 驱动程序使用目录作为数据源,使用文件作为单独的表(每个 .xls 文件有一个表)。

有关创建表的详细信息,请参阅数据源:以编程方式在 ODBC 数据源中创建表

以下信息介绍需要传递给 ::SQLConfigDataSource ODBC API 函数的参数。 若要使用 ::SQLConfigDataSource,必须包含 Odbcinst.h 头文件并使用 Odbcinst.lib 导入库。 此外,在运行时,Odbccp32.dll(或 16 位版本中的 Odbcinst.dll)必须在路径中。

可以使用 ODBC 管理器或类似的实用工具创建 ODBC 数据源名称。 但是,有时需要直接从应用程序创建数据源名称以获取访问权限,而无需用户运行单独的实用工具。

ODBC 管理器(通常在控制面板中安装)通过将条目放入 Windows 注册表(或者在 16 位版本中放入 Odbc.ini 文件)来创建新数据源。 ODBC 驱动程序管理器查询此文件以获取有关数据源的所需信息。 必须知道要将哪些信息放入注册表,因为在 ::SQLConfigDataSource 调用中需要提供这些信息。

尽管可将这些信息直接写入注册表而无需使用 ::SQLConfigDataSource,但执行这种操作的任何应用程序都依赖于由驱动程序管理器用来维护其数据的当前技术。 如果 ODBC 驱动程序管理器的将来修订版以不同的方式实现数据源的记录保存,则使用此技术的任何应用程序将会损坏。 一般建议使用 API 函数(如果已提供)。 例如,如果使用 ::SQLConfigDataSource 函数,则代码可从 16 位移植到 32 位,因为该函数可正确写入 Odbc.ini 文件或注册表。

SQLConfigDataSource 参数

下面解释 ::SQLConfigDataSource 函数的参数。 大部分信息摘自 Visual C++ 1.5 和更高版本随附的 ODBC API 程序员参考

函数原型

BOOL SQLConfigDataSource(HWND hwndParent,UINT fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes);

备注

参数和用法

hwndParent
指定为任何对话框的所有者的窗口,这些对话框由 ODBC 驱动程序管理器或特定 ODBC 驱动程序创建,用于从用户那里获取有关新数据源的附加信息。 如果 lpszAttributes 参数未提供足够的信息,则会显示一个对话框。 hwndParent 参数可能为 NULL

lpszDriver
驱动程序说明。 这是向用户显示的名称,而不是物理驱动程序名称 (DLL)。

lpszAttributes
“键名=值”格式的属性列表。 这些字符串由 null 终止符分隔,列表末尾有两个连续的 null 终止符。 这些属性主要是默认的特定于驱动程序的条目,它们将写入新数据源的注册表。 此函数的 ODBC API 参考中未提到的一个重要键是“DSN”(“数据源名称”),它指定新数据源的名称。 其余条目特定于新数据源的驱动程序。 通常不需要提供所有条目,因为驱动程序可以通过对话框提示用户输入新值。 (将 hwndParent 设置为 NULL 将显示此提示。)建议显式提供默认值,以便不提示用户。

使用 ODBC 管理器确定 lpszDriver 参数的驱动程序说明

  1. 运行 ODBC 管理器。

  2. 单击“添加” 。

随后会显示已安装的驱动程序及其说明的列表。 将此说明用作 lpszDriver 参数。 请注意,应使用完整说明,例如“Excel 文件(*.xls)”,包括文件扩展名和括号(如果说明中包含括号)。

作为替代方法,可以检查注册表(或者 16 位版本中的文件 Odbcinst.ini),其中的注册表项“ODBC Drivers”(或 odbcinst.ini 中的 [ODBC Drivers] 节)下包含所有驱动程序条目和说明的列表。

查找 lpszAttributes 参数的键名和值的方式之一是在 Odbc.ini 文件中检查已配置的数据源(也许是 ODBC 管理器配置的数据源)

查找 lpszAttributes 参数的键名和值

  1. 运行 Windows 注册表编辑器(或者在 16 位版本中打开 Odbc.ini 文件)。

  2. 使用以下方式之一查找 ODBC 数据源信息:

    • 对于 32 位,请在左侧窗格中找到注册表项 HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources

      右侧窗格会列出以下格式的条目:“pub: REG_SZ:<data source name>”,其中 <data source name> 是一个数据源,已经为其配置了你要使用的驱动程序的所需设置。 选择所需的数据源,例如 SQL Server。 字符串“pub:”后面的项依次是要在 lpszAttributes 参数中使用的键名和值

    • 对于 16 位,请在 Odbc.ini 文件中找到标有 [<data source name>] 的节

      此行后面的行的格式为“键名=值”。 这正是要在 lpszAttributes 参数中使用的条目

还可以查看你要使用的特定驱动程序的文档。 可以在驱动程序的联机帮助(可运行 ODBC 管理器来访问)中找到有用的信息。 对于 Windows NT、Windows 3.1 或 Windows 95,这些帮助文件通常位于 WINDOWS\SYSTEM 目录中。

获取 ODBC 驱动程序的联机帮助

  1. 运行 ODBC 管理器。

  2. 单击“添加” 。

  3. 选择驱动程序名称。

  4. 单击“确定”。

当 ODBC 管理器显示了有关为该特定驱动程序创建新数据源的信息时,请单击“帮助”。 这会打开该特定驱动程序的帮助文件,其中通常包含有关使用驱动程序的重要信息。

另请参阅

数据源 (ODBC)