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

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

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

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

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

  3. ODBC を初期化し、環境ハンドルを割り当てるために、SQL_HANDLE_ENVの HandleType を使用してSQLAllocHandleを呼び出します。

  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 に接続します。

    または

    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. 接続ハンドル 解放するには SQL_HANDLE_DBCの HandleType を使用して SQLFreeHandle を呼び出します。

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

重要

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

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