分享方式:


設定句柄並連接到 SQL Server (ODBC)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Platform System (PDW)

配置句柄並連線到 SQL Server

  1. 包含 ODBC 頭檔 Sql.h、Sqlext.h、Sqltypes.h。

  2. 包含 SQL Server 驅動程式特定的頭檔 Odbcss.h。

  3. 使用SQL_HANDLE_ENV的 HandleType 呼叫 SQLAllocHandle,以初始化 ODBC 並配置環境句柄。

  4. 呼叫 SQLSetEnvAttr 並將 Attribute 設定為 SQL_ATTR_ODBC_VERSION 且 ValuePtr 設定為 SQL_OV_ODBC3,表示應用程式將使用 ODBC 3.x 格式函數調用。

  5. 或者,呼叫 SQLSetEnvAttr 來設定其他環境選項,或呼叫 SQLGetEnvAttr 以取得環境選項。

  6. 使用SQL_HANDLE_DBC的 HandleType 呼叫 SQLAllocHandle,以配置連接句柄。

  7. 或者,呼叫 SQLSetConnectAttr 來設定連線選項,或呼叫 SQLGetConnectAttr 以取得連線選項。

  8. 呼叫 SQLConnect 以使用現有的數據源連線到 SQL Server。

    Or

    呼叫 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);