次の方法で共有


データ ソースへの接続 (ODBC)

適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

アプリケーションは、環境ハンドルと接続ハンドルを割り当て、任意の接続属性を設定してから、データ ソースまたはドライバーに接続します。 接続には、次の 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 ウィンドウ ハンドルを使用して SQLDriverConnect を呼び出し DriverCompletion SQL_DRIVER_NOPROMPTに設定できます。 このようにパラメーターを設定すると、ODBC ドライバー独自のダイアログ ボックスが開かれなくなります。 この方法は、アプリケーションでユーザー インターフェイスを制御することが重要な場合に使用します。

  • ドライバー ダイアログ ボックス

    アプリケーションをコーディングして、有効なウィンドウ ハンドルを SQLDriverConnect に渡し、 DriverCompletion パラメーターをSQL_DRIVER_COMPLETE、SQL_DRIVER_PROMPT、またはSQL_DRIVER_COMPLETE_REQUIREDに設定できます。 この場合、ドライバーがダイアログ ボックスを生成して、ユーザーに接続情報を要求します。 この方法を使用すると、アプリケーション コードが簡素化されます。

SQLBrowseConnect

SQLDriverConnect と同様に、SQLBrowseConnect は接続文字列を使用します。 ただし、SQLBrowseConnect を使用すると、アプリケーションは実行時にデータ ソースを使用して完全な接続文字列を反復的に構築できます。 この方法を使用すると、アプリケーションで次の 2 つのことを行えます。

  • アプリケーション独自のダイアログ ボックスを作成して目的の情報を要求できるので、アプリケーションのユーザー インターフェイスで制御できます。

  • 特定のドライバーが使用できるデータ ソースをシステムから参照できます。これは複数の手順になる場合があります。

    たとえば、ユーザーは最初にネットワークを介してサーバーを参照して、サーバーを選択します。次に、そのサーバーを介して、ドライバーがアクセスできるデータベースを参照するといった手順です。

SQLBrowseConnectが正常な接続を完了すると、後続の SQLDriverConnect への呼び出しで使用できる接続文字列が返されます。

SQL Server Native Client ODBC ドライバーは、成功した SQLConnectSQLDriverConnect、または SQLBrowseConnect で常にSQL_SUCCESS_WITH_INFOを返します。 ODBC アプリケーションは、SQL_SUCCESS_WITH_INFOを取得した後に 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 のインスタンスを実行しているサーバーに接続する場合、SQL_SUCCESS_WITH_INFO後に SQLGetDiagRec によって返されるエラーの 1 つは次のようになります。

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 を呼び出す必要があります。 その後、 pfNative コードが 5701 または 5703 のメッセージ以外のメッセージに対して動作する必要があります。

参照

SQL Server との通信 (ODBC)