如何:配置控制代碼並連接到 SQL Server (ODBC)

配置控制代碼並連接到 SQL Server

  1. 加入 ODBC 標頭檔 Sql.h、Sqlext.h、Sqltypes.h。

  2. 加入 SQL Server 驅動程式專屬的標頭檔 Odbcss.h。

  3. 利用 SQL_HANDLE_ENV 的 HandleType 呼叫 SQLAllocHandle 來初始化 ODBC 並配置環境控制代碼。

  4. 在將 Attribute 設定為 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 加密這些認證。

範例

此範例顯示呼叫 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);