ハンドルの割り当てと SQL Server への接続 (ODBC)

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL データベース はいAzure SQL Managed Instance はいAzure Synapse Analytics はいParallel Data Warehouse

ハンドルを割り当てて SQL Server に接続するには

  1. ODBC ヘッダー ファイル Sql.h、Sqlext.h、Sqltypes.h を含めます。

  2. SQL Server ドライバー固有のヘッダー ファイル Odbcss.h を含めます。

  3. SQLAllocHandle を HandleType で呼び出SQL_HANDLE_ENV ODBC を初期化し、環境ハンドルを割り当てる必要があります。

  4. [属性] を SQL_ATTR_ODBC_VERSIONに設定し 、ValuePtr を SQL_OV_ODBC3 に設定して SQLSetEnvAttrを呼び出して、アプリケーションが ODBC 3.x 形式関数呼び出しを使用すると示します。

  5. 必要に応じて 、SQLSetEnvAttr を呼び出して他の環境オプションを設定するか 、SQLGetEnvAttr を呼び出して環境オプションを取得します。

  6. 接続 ハンドルを割り当 てるには、 の HandleType をSQL_HANDLE_DBC SQLAllocHandle を呼び出します。

  7. 必要に応じて 、SQLSetConnectAttr を呼び出して接続オプションを設定するか 、SQLGetConnectAttr を呼び出して接続オプションを取得します。

  8. SQLConnect を呼び出して、既存のデータ ソースを使用して に接続します SQL Server 。

    または

    SQLDriverConnect を呼び出して、接続文字列を使用して に接続します SQL Server 。

    最小の完全な SQL Server 接続文字列は、次の 2 つの形式のいずれかになります。

    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 を指定して SQLFreeHandleを呼び出SQL_HANDLE_DBC接続ハンドルを解放します。

  13. 環境 ハンドルを解放 するために 、HandleType SQL_HANDLE_ENV SQLFreeHandle を呼び出します。

重要

可能な場合は、Windows 認証を使用します。 Windows 認証が使用できない場合は、実行時に資格情報を入力するようユーザーに求めます。 資格情報をファイルに保存するのは避けてください。 資格情報を保持する必要がある場合は、Win32 Crypto API を使用して暗号化してください。

この例では、既存の ODBC データ ソースを必要とせずに のインスタンスに接続するための SQLDriverConnect の呼び SQL Server 出しを示します。 不完全な接続文字列を 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);