连接数据源 (ODBC)

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics 平台系统(PDW)

在分配环境和连接句柄并设置连接属性后,应用程序将连接到数据源或驱动程序。 有三种可用于连接的函数:

  • SQLConnect

  • SQLDriverConnect

  • SQLBrowseConnect

有关与数据源建立连接的详细信息,包括可用的各种连接字符串选项,请参阅将连接字符串关键字与 SQL Server Native Client 配合使用。

SQLConnect

SQLConnect 是最简单的连接函数。 它接受三个参数:数据源名称、用户 ID 和密码。 当这三个参数包含连接到数据库所需的所有信息时,请使用 SQLConnect 。 为此,请使用 SQLDataSource 生成数据源列表;提示用户输入数据源、用户 ID 和密码;然后调用 SQLConnect

SQLConnect 假定数据源名称、用户 ID 和密码足以连接到数据源,ODBC 数据源包含 ODBC 驱动程序进行连接所需的所有其他信息。 与 SQLDriverConnect 和 SQLBrowseConnect 不同SQLConnect 不使用连接字符串。

SQLDriverConnect

当需要数据源名称、用户 ID 和密码的详细信息时,将使用 SQLDriverConnect 。 SQLDriverConnect 的参数之一是包含特定于驱动程序的信息连接字符串。 出于以下原因, 可以使用 SQLDriverConnect 而不是 SQLConnect

  • 在连接时指定特定于驱动程序的信息。

  • 请求驱动程序提示用户输入连接信息。

  • 不使用 ODBC 数据源进行连接。

SQLDriverConnect 连接字符串包含一系列关键字值对,用于指定 ODBC 驱动程序支持的所有连接信息。 每个驱动程序都支持标准 ODBC 关键字(DSN、FILEDSN、DRIVER、UID、PWD 和 SAVEFILE),以及用于驱动程序支持的所有连接信息的特定于驱动程序的关键字。 SQLDriverConnect 可用于在没有数据源的情况下进行连接。 例如,设计为与 SQL Server 实例建立“DSN 少”连接的应用程序可以使用定义登录 ID、密码、网络库、服务器名称以连接到的默认数据库连接字符串来调用 SQLDriverConnect

使用 SQLDriverConnect 时,有两个选项用于提示用户输入任何所需的连接信息:

  • 应用程序对话框

    可以创建一个应用程序对话框,提示输入连接信息,然后使用 NULL 窗口句柄和 DriverCompletion 设置为SQL_DRIVER_NOPROMPT调用 SQLDriverConnect。 这些参数设置将禁止 ODBC 驱动程序打开自己的对话框。 在对应用程序的用户界面进行控制非常重要时,使用此方法。

  • 驱动程序对话框

    可以将应用程序编码为将有效的窗口句柄传递给 SQLDriverConnect,并将 DriverCompletion 参数设置为SQL_DRIVER_COMPLETE、SQL_DRIVER_PROMPT或SQL_DRIVER_COMPLETE_REQUIRED。 驱动程序然后生成一个对话框,以便提示用户输入连接信息。 此方法可以简化应用程序代码。

SQLBrowseConnect

SQLBrowseConnect(例如 SQLDriverConnect)使用连接字符串。 但是,通过使用 SQLBrowseConnect,应用程序可以在运行时使用数据源以迭代方式构造完整的连接字符串。 这允许应用程序执行以下两种操作:

  • 生成自己的对话框以提示输入此信息,因此保留对其用户界面的控制。

  • 浏览系统以找到可由特定的驱动程序使用的数据源,这可能要执行若干步骤。

    例如,用户可能要首先浏览网络以找到服务器,然后在选择某一服务器后,浏览该服务器以找到驱动程序可访问的数据库。

当 SQLBrowseConnect 成功完成连接时,它将返回一个连接字符串,该连接字符串可用于对 SQLDriverConnect 的后续调用

SQL Server Native Client ODBC 驱动程序始终在成功的 SQLConnect、SQLDriverConnectSQLBrowseConnect 上返回SQL_SUCCESS_WITH_INFO。 当 ODBC 应用程序在获取SQL_SUCCESS_WITH_INFO后调用 SQLGetDiagRec 时,它可以接收以下消息:

5701
指示 SQL Server 将用户的上下文放入数据源中定义的默认数据库,或者在数据源没有默认数据库的情况下为连接中使用的登录 ID 定义的默认数据库。

5703
指示要在服务器上使用的语言。

以下示例显示系统管理员对成功的连接返回的消息:

szSqlState = "01000", *pfNativeError = 5701,  
szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server]  
       Changed database context to 'pubs'."  
szSqlState = "01000", *pfNativeError = 5703,  
szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server]  
       Changed language setting to 'us_english'."  

您可以忽略消息 5701 和 5703;它们仅供参考。 但是,不应忽视 SQL_SUCCESS_WITH_INFO 返回代码,因为可能返回并非 5701 或 5703 的其他消息。 例如,如果驱动程序使用过时的目录存储过程连接到运行 SQL Server 实例的服务器,则SQL_SUCCESS_WITH_INFO后通过 SQLGetDiagRec 返回的错误之一为:

SqlState:   01000  
pfNative:   0  
szErrorMsg: "[Microsoft][SQL Server Native Client]The ODBC  
            catalog stored procedures installed on server  
            my65server are version 06.50.0193; version 07.00.0205  
            or later is required to ensure proper operation.  
            Please contact your system administrator."  

SQL Server 连接的应用程序的错误处理函数应调用 SQLGetDiagRec ,直到它返回SQL_NO_DATA。 然后,它应处理除 pfNative 代码为 5701 或 5703 的消息以外的任何消息。

另请参阅

与 SQL Server 通信 (ODBC)