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

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics 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. 使用handleType SQL_HANDLE_DBC 呼叫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. 使用handleType SQL_HANDLE_DBC 呼叫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);