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

适用于:SQL Server (所有受支持的版本) Azure SQL数据库Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)

分配句柄并连接到 SQL Server

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

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

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

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

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

  6. 使用 SQL_HANDLE_DBC HandleType 调用 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. 使用 SQL_HANDLE_DBC HandleType 调用 SQLFreeHandle 以释放连接句柄。

  13. 使用 SQL_HANDLE_ENV HandleType 调用 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);