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

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

分配句柄并连接到 SQL Server

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

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

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

  4. 调用属性设置为 SQL_ATTR_ODBC_VERSION 且 ValuePtr 设置为 SQL_OV_ODBC3 的 SQLSetEnvAttr,以指示应用程序将使用 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 SQL_HANDLE_DBC 调用 SQLFreeHandle 以释放连接句柄。

  13. 使用 handleType 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);