连接数据源 (ODBC)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

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

  • SQLConnect

  • SQLDriverConnect

  • SQLBrowseConnect

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

SQLConnect

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

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

SQLDriverConnect

当需要比数据源名称、用户 ID 和密码更多的信息时,将使用 SQLDriverConnectSQLDriverConnect 的参数之一是包含特定于驱动程序的信息的连接字符串。 出于以下原因,你可能使用 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)