データ ソースへの接続 (ODBC)
アプリケーションは、環境ハンドルと接続ハンドルを割り当て、任意の接続属性を設定してから、データ ソースまたはドライバーに接続します。 接続には、次の 3 つの関数を使用できます。
SQLConnect
SQLDriverConnect
SQLBrowseConnect
データ ソースへの接続と、使用可能なさまざまな接続文字列オプションの詳細については、「SQL Server Native Client での接続文字列キーワードの使用」を参照してください。
SQLConnect
SQLConnect は最も単純な接続関数です。 この関数は、データ ソース名、ユーザー ID、パスワードの 3 つのパラメーターを受け取ります。 データベースへの接続に必要な情報がこれら 3 つのパラメーターだけの場合は、SQLConnect を使用してください。 この関数を使用するには、SQLDataSources を使用してデータ ソースの一覧を作成し、データ ソース、ユーザー ID、およびパスワードをユーザーに問い合わせます。その後、SQLConnect を呼び出します。
SQLConnect では、データ ソース名、ユーザー ID、およびパスワードだけを使用してデータ ソースに接続することが前提となっています。また、ODBC データ ソースには接続のために ODBC ドライバーで必要となるその他すべての情報が含まれている必要があります。 SQLDriverConnect や SQLBrowseConnect と異なり、SQLConnect では接続文字列を使用しません。
SQLDriverConnect
SQLDriverConnect は、データ ソース名、ユーザー ID、およびパスワード以外にも情報が必要な場合に使用します。 SQLDriverConnect のパラメーターの 1 つは、ドライバー固有の情報で構成された接続文字列です。 次のような状況では、SQLConnect ではなく SQLDriverConnect を使用できます。
接続時にドライバー固有の情報を指定する場合
ドライバーがユーザーに対して接続情報を要求する場合
ODBC データ ソースを使用せずに接続する場合
SQLDriverConnect の接続文字列は、ODBC ドライバーでサポートされるすべての接続情報を指定する、一連のキーワードと値の組み合わせで構成されます。 各ドライバーでは、ドライバーでサポートされるすべての接続情報を表すドライバー固有のキーワード以外に、標準の ODBC キーワード (DSN、FILEDSN, DRIVER、UID、PWD、および SAVEFILE) をサポートします。 SQLDriverConnect を使用すると、データ ソースを使用せずに接続できます。 たとえば、SQL Server のインスタンスに "DSN を使用せずに接続する" ようにデザインされたアプリケーションでは、ログイン ID、パスワード、ネットワーク ライブラリ、接続先のサーバー名、および使用する既定のデータベースを定義する接続文字列を指定して SQLDriverConnect を呼び出せます。
SQLDriverConnect を使用するときに、必要な接続情報をユーザーに問い合わせる方法には、次の 2 つがあります。
アプリケーション ダイアログ ボックス
接続情報を要求するアプリケーション ダイアログ ボックスを作成してから、ウィンドウ ハンドルに NULL を指定し、DriverCompletion に SQL_DRIVER_NOPROMPT を設定して SQLDriverConnect を呼び出します。 このようにパラメーターを設定すると、ODBC ドライバー独自のダイアログ ボックスが開かれなくなります。 この方法は、アプリケーションでユーザー インターフェイスを制御することが重要な場合に使用します。
ドライバー ダイアログ ボックス
SQLDriverConnect に有効なウィンドウ ハンドルを渡し、DriverCompletion パラメーターに SQL_DRIVER_COMPLETE、SQL_DRIVER_PROMPT、または SQL_DRIVER_COMPLETE_REQUIRED を設定するようにアプリケーションをコーディングできます。 この場合、ドライバーがダイアログ ボックスを生成して、ユーザーに接続情報を要求します。 この方法を使用すると、アプリケーション コードが簡素化されます。
SQLBrowseConnect
SQLBrowseConnect では、SQLDriverConnect と同様に接続文字列を使用します。 ただし、SQLBrowseConnect を使用すると、アプリケーションでデータ ソースとやり取りしながら、実行時に完全な接続文字列を作成できます。 この方法を使用すると、アプリケーションで次の 2 つのことを行えます。
アプリケーション独自のダイアログ ボックスを作成して目的の情報を要求できるので、アプリケーションのユーザー インターフェイスで制御できます。
特定のドライバーが使用できるデータ ソースをシステムから参照できます。これは複数の手順になる場合があります。
たとえば、ユーザーは最初にネットワークを介してサーバーを参照して、サーバーを選択します。次に、そのサーバーを介して、ドライバーがアクセスできるデータベースを参照するといった手順です。
SQLBrowseConnect 関数によって正常に接続が確立されると、その後の SQLDriverConnect 呼び出しで使用できる接続文字列が返されます。
SQL Server Native Client ODBC ドライバーでは、SQLConnect、SQLDriverConnect、または SQLBrowseConnect が成功した場合には必ず SQL_SUCCESS_WITH_INFO が返されます。 SQL_SUCCESS_WITH_INFO を取得した後、ODBC アプリケーションで SQLGetDiagRec を呼び出すと、次のメッセージを受け取ります。
5701
このメッセージは、SQL Server が、ユーザーのコンテキストをデータ ソースで定義されている既定のデータベースに登録したことを示します。または、データ ソースに既定のデータベースが定義されていない場合は、接続で使用したログイン ID に対して定義されている既定のデータベースに登録したことを示します。5703
このメッセージは、その言語がサーバーで使用されていることを示します。
次の例では、システム管理者によって接続が正常に確立されたときに返されるメッセージを示します。
szSqlState = "01000", *pfNativeError = 5701,
szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server]
Changed database context to 'pubs'."
szSqlState = "01000", *pfNativeError = 5703,
szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server]
Changed language setting to 'us_english'."
5701 と 5703 のメッセージは、情報提供だけを目的としているので無視できます。 ただし、SQL_SUCCESS_WITH_INFO リターン コードでは 5701 や 5703 以外のメッセージも返されることがあるので、そのようなリターン コードは無視しないでください。 たとえば、ドライバーが SQL Server のインスタンスを実行しているサーバーに接続した場合、そのインスタンスのカタログ ストアド プロシージャが古いと、SQLGetDiagRec から SQL_SUCCESS_WITH_INFO に続いて次のエラーが返されます。
SqlState: 01000
pfNative: 0
szErrorMsg: "[Microsoft][SQL Server Native Client]The ODBC
catalog stored procedures installed on server
my65server are version 06.50.0193; version 07.00.0205
or later is required to ensure proper operation.
Please contact your system administrator."
SQL Server 接続を行うアプリケーションでエラー処理関数を使用すると、SQL_NO_DATA が返されるまで SQLGetDiagRec が呼び出されます。 このとき、5701 または 5703 以外の pfNative コードに関するメッセージが返された場合に、それに対応する処置が実行されます。