分配句柄并连接到 SQL Server (ODBC)
分配句柄并连接到 SQL Server
包含 ODBC 头文件 Sql.h、Sqlext.h、Sqltypes.h。
包括SQL Server特定于驱动程序的头文件 Odbcss.h。
使用
HandleType
SQL_HANDLE_ENV 的 调用 SQLAllocHandle 以初始化 ODBC 并分配环境句柄。调用 SQLSetEnvAttr ,并将
Attribute
设置为 SQL_ATTR_ODBC_VERSION 并ValuePtr
设置为 SQL_OV_ODBC3 以指示应用程序将使用 ODBC 3.x 格式的函数调用。(可选)调用 SQLSetEnvAttr 以设置其他环境选项,或调用 SQLGetEnvAttr 获取环境选项。
使用
HandleType
SQL_HANDLE_DBC 的 调用 SQLAllocHandle 以分配连接句柄。(可选)调用 SQLSetConnectAttr 来设置连接选项,或调用 SQLGetConnectAttr 以获取连接选项。
调用 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。
(可选)调用 SQLGetInfo 以获取SQL Server数据源的驱动程序属性和行为。
分配并使用语句。
调用 SQLDisconnect 以断开与SQL Server的连接,并使连接句柄可用于新连接。
使用
HandleType
SQL_HANDLE_DBC 调用 SQLFreeHandle 以释放连接句柄。调用
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);