次の方法で共有


ハンドルを割り当てて SQL Server に接続する方法 (ODBC)

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

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

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

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

  4. Attribute を 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 を SQL_HANDLE_DBC として SQLFreeHandle を呼び出し、接続ハンドルを解放します。

  13. HandleType を SQL_HANDLE_ENV として SQLFreeHandle を呼び出し、環境ハンドルを解放します。

セキュリティに関する注意セキュリティに関する注意

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

使用例

次の例では、SQLDriverConnect を呼び出して、既存の ODBC データ ソースを要求せずに 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);