驱动程序管理器
驱动程序 管理器 是一个库,用于管理应用程序和驱动程序之间的通信。 例如,在 Microsoft Windows 平台上,驱动程序管理器是 Microsoft 编写的动态链接库 (DLL),可由可再发行的 MDAC 2.8 SP1 SDK 的用户再分发。
驱动程序管理器的存在主要是为了方便应用程序编写者,并解决所有应用程序共有的一些问题。 这包括根据数据源名称确定要加载的驱动程序、加载和卸载驱动程序以及调用驱动程序中的函数。
要了解为什么后者是个问题,请考虑如果应用程序直接调用驱动程序中的函数,会发生什么情况。 除非应用程序直接链接到特定驱动程序,否则它必须生成指向此驱动程序中函数的指针表,并按指针调用这些函数。 一次对多个驱动程序使用相同的代码会加大另一个复杂性。 应用程序首先必须设置一个函数指针,以指向正确驱动程序中的正确函数,然后通过该指针调用此函数。
驱动程序管理器通过提供单个位置来调用每个函数以解决此问题。 应用程序链接到驱动程序管理器,并在驱动程序管理器中调用 ODBC 函数,而不是驱动程序。 应用程序使用连接句柄标识目标驱动程序和数据源。 加载驱动程序时,驱动程序管理器会生成指向此驱动程序中函数的指针表。 其使用应用程序传递的连接句柄在目标驱动程序中查找函数地址,并通过地址调用此函数。
在大多数情况下,驱动程序管理器只是将函数调用从应用程序传递到正确的驱动程序。 但是,驱动程序还实现某些函数 (SQLDataSources、SQLDrivers 和 SQLGetFunctions),并执行基本错误检查。 例如,驱动程序管理器检查句柄是否不是空指针、是否按正确顺序调用的函数以及某些函数参数是否有效。 有关驱动程序管理器检查的错误的完整说明,请参阅每个函数的参考部分和附录 B:ODBC 状态转换表。
驱动程序管理器最后一个主要作用是加载和卸载驱动程序。 应用程序仅加载和卸载驱动程序管理器。 其想使用特定驱动程序时,会在驱动程序管理器中调用连接函数 (SQLConnect、SQLDriverConnect 或 SQLBrowseConnect),并指定特定数据源或驱动程序的名称,例如“会计”或“SQL Server”。驱动程序管理器使用此名称在数据源信息中搜索驱动程序的文件名,例如 Sqlsrvr.dll。 然后,应用程序会加载驱动程序(假设尚未加载),将每个函数的地址存储在驱动程序中,并在驱动程序中调用连接函数,然后初始化自身并连接到数据源。
当应用程序使用完驱动程序后,应用程序调用驱动程序管理器中的 SQLDisconnect。 驱动程序管理器在驱动程序中调用此函数,从而断开与数据源的连接。 但是,驱动程序管理器会将驱动程序保留在内存中,以防应用程序重新连接到驱动程序。 仅当应用程序释放驱动程序使用的连接或将此连接用于不同的驱动程序并且没有其他连接使用此驱动程序时,应用程序才会卸载驱动程序。 有关驱动程序管理器在加载和卸载驱动程序中起到的作用的完整说明,请参阅驱动程序管理器在连接过程中起到的作用。