分配句柄并连接到 SQL Server (ODBC)

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

分配句柄并连接到 SQL Server

  1. 包含 ODBC 头文件 Sql.h、Sqlext.h、Sqltypes.h。

  2. 包括特定于 SQL Server 驱动程序的头文件 Odbcss.h。

  3. 使用 SQL_HANDLE_ENV HandleType 调用 SQLAllocHandle 以初始化 ODBC 并分配环境句柄。

  4. 调用设置为SQL_ATTR_ODBC_VERSION属性的 SQLSetEnvAttr将 ValuePtr 设置为SQL_OV_ODBC3以指示应用程序将使用 ODBC 3.x 格式函数调用。

  5. (可选)调用 SQLSetEnvAttr 以设置其他环境选项,或调用 SQLGetEnvAttr 获取环境选项。

  6. 使用 handleType 为 SQL_HANDLE_DBC 调用 SQLAllocHandle 以分配连接句柄。

  7. (可选)调用 SQLSetConnectAttr 以设置连接选项,或调用 SQLGetConnectAttr 获取连接选项。

  8. 调用 SQLConnect 以使用现有数据源连接到 SQL Server。

    调用 SQLDriverConnect 以使用连接字符串连接到 SQL Server。

    至少完整的 SQL Server 连接字符串有两种形式之一:

    DSN=dsn_name;Trusted_connection=yes;  
    DRIVER={SQL Server Native Client 10.0};SERVER=server;Trusted_connection=yes;  
    

    如果连接字符串未完成,SQLDriverConnect 可以提示输入所需的信息。 这由为 DriverCompletion 参数指定的值控制。

    - 或 -

    以迭代方式多次调用 SQLBrowseConnect,以生成连接字符串并连接到 SQL Server。

  9. (可选)调用 SQLGetInfo 以获取 SQL Server 数据源的驱动程序属性和行为。

  10. 分配并使用语句。

  11. 调用 SQLDisconnect 以断开与 SQL Server 的连接,并使连接句柄可用于新连接。

  12. 使用 handleType of SQL_HANDLE_DBC 调用 SQLFreeHandle 以释放连接句柄。

  13. 使用 handleType of SQL_HANDLE_ENV 调用 SQLFreeHandle 以释放环境句柄。

重要

请尽可能使用 Windows 身份验证。 如果 Windows 身份验证不可用,请在运行时提示用户输入其凭据。 不要将凭据存储在一个文件中。 如果必须保存凭据,应当用 Win32 crypto API(Win32 加密 API)加密它们。

示例

此示例演示了调用 SQLDriverConnect 以连接到 SQL Server 实例,而无需现有的 ODBC 数据源。 通过将不完整的连接字符串传递给 SQLDriverConnect,它会导致 ODBC 驱动程序提示用户输入缺失的信息。

#define MAXBUFLEN   255  
  
SQLHENV      henv = SQL_NULL_HENV;  
SQLHDBC      hdbc1 = SQL_NULL_HDBC;  
SQLHSTMT      hstmt1 = SQL_NULL_HSTMT;  
  
SQLCHAR      ConnStrIn[MAXBUFLEN] =  
         "DRIVER={SQL Server Native Client 10.0};SERVER=MyServer";  
  
SQLCHAR      ConnStrOut[MAXBUFLEN];  
SQLSMALLINT   cbConnStrOut = 0;  
  
// Make connection without data source. Ask that driver   
// prompt if insufficient information. Driver returns  
// SQL_ERROR and application prompts user  
// for missing information. Window handle not needed for  
// SQL_DRIVER_NOPROMPT.  
retcode = SQLDriverConnect(hdbc1,      // Connection handle  
                  NULL,         // Window handle  
                  ConnStrIn,      // Input connect string  
                  SQL_NTS,         // Null-terminated string  
                  ConnStrOut,      // Address of output buffer  
                  MAXBUFLEN,      // Size of output buffer  
                  &cbConnStrOut,   // Address of output length  
                  SQL_DRIVER_PROMPT);