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

分配句柄并连接到 SQL Server

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

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

  3. 调用 SQLAllocHandle 并在调用时将 HandleType 设为 SQL_HANDLE_ENV 来初始化 ODBC 并分配环境句柄。

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

  5. 另外,也可以调用 SQLSetEnvAttr 来设置其他环境选项,或调用 SQLGetEnvAttr 来获取环境选项。

  6. 调用 SQLAllocHandle 并在调用时将 HandleType 设为 SQL_HANDLE_DBC 以分配连接句柄。

  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. 调用 SQLFreeHandle 并在调用时将 HandleType 设为 SQL_HANDLE_DBC 以释放连接句柄。

  13. 调用 SQLFreeHandle 并在调用时将 HandleType 设为 SQL_HANDLE_ENV 以释放环境句柄。

安全说明安全说明

请尽可能使用 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);