ハンドルを割り当てて SQL Server に接続する方法 (ODBC)
ハンドルを割り当てて SQL Server に接続するには
ODBC ヘッダー ファイル Sql.h、Sqlext.h、Sqltypes.h を含めます。
SQL Server ドライバー固有のヘッダー ファイル Odbcss.h を含めます。
HandleType を SQL_HANDLE_ENV として SQLAllocHandle を呼び出し、ODBC を初期化して環境ハンドルを割り当てます。
Attribute を SQL_ATTR_ODBC_VERSION に設定し、また ValuePtr を SQL_OV_ODBC3 に設定して SQLSetEnvAttr を呼び出し、アプリケーションで ODBC 3.x 形式の関数呼び出しを使用することを指定します。
また、SQLSetEnvAttr を呼び出して他の環境オプションを設定するか、SQLGetEnvAttr を呼び出して環境オプションを取得することもできます。
HandleType を SQL_HANDLE_DBC として SQLAllocHandle を呼び出し、接続ハンドルを割り当てます。
また、SQLSetConnectAttr を呼び出して接続オプションを設定するか、SQLGetConnectAttr を呼び出して接続オプションを取得することもできます。
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 に接続します。
SQLGetInfo を呼び出し、SQL Server データ ソースのドライバーの属性と動作を取得することもできます。
ステートメントを割り当てて使用します。
SQLDisconnect を呼び出し、SQL Server との接続を解除し、接続ハンドルを新しい接続で使用できるようにします。
HandleType を SQL_HANDLE_DBC として SQLFreeHandle を呼び出し、接続ハンドルを解放します。
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);