次の方法で共有


ADOMD.NET での接続 - 接続とセッションの使用

XML for Analysis (XMLA) では、分析データにアクセスする際のステートフルな操作をセッションがサポートします。 セッションは、分析データ ソースに対して実行するコマンドおよびトランザクションのスコープとコンテキストを決定します。 セッション管理で使用する XMLA 要素は、BeginSession、Session、および EndSession です。

ADOMD.NET はこれらの XMLA セッション要素を使用して、セッションを開始し、クエリの実行やデータの取得を行い、セッションを閉じます。

セッションの開始

オブジェクトの AdomdConnection プロパティに SessionID は、オブジェクトに AdomdConnection 関連付けられているアクティブなセッションの識別子が格納されます。 このプロパティを正しく使用することで、クライアントとサーバー両方のステートフル性をアプリケーションで効率的に制御することができます。

  • SessionIDメソッドが呼び出されたとき Open に、プロパティが有効なセッション id に設定されていない場合、オブジェクトはプロバイダーから新しいセッション id を要求し AdomdConnection ます。 ADOMD.NET は、XMLA beginsession ヘッダーをプロバイダーに送信することによって、セッションを開始します。 ADOMD.NET が正常にセッションを開始した場合、ADOMD.NET は、新しく作成されたセッションのセッション ID にプロパティの SessionID 値を設定します。

  • SessionIDメソッドが呼び出されたとき Open に、プロパティが有効なセッション ID に設定されている場合、オブジェクトは AdomdConnection 指定されたセッションに接続しようとします。

オブジェクトが AdomdConnection 指定されたセッションに接続できない場合、またはプロバイダーがセッションをサポートしていない場合は、例外がスローされます。

注意

セッションの作成が完了したら、1つのアクティブなセッションに複数 AdomdConnection のオブジェクトを接続するか、そのセッションから1つ AdomdConnection のオブジェクトを切断し、そのオブジェクトを別のセッションに再接続することができます。

セッションでの作業

ADOMD.NET がオブジェクトを有効なセッションに接続 AdomdConnection した後、ADOMD.NET は、アプリケーションによって作成されたデータまたはメタデータに対するすべての要求を使用して、XMLA セッション ヘッダーをプロバイダーに送信します。 すべての要求には、プロパティの SessionID 値に設定されたセッション ID があります。

セッションが有効な状態で維持されるかどうかは、セッション ID で保証されるわけではありせん。 セッションが期限切れになった場合 (たとえば、タイムアウトが発生するか、接続が失われた場合)、プロバイダーはそのセッションの処理を終了してロールバックすることを選択できます。 このエラーが発生すると、オブジェクトから AdomdConnection の後続のすべてのメソッド呼び出しで例外がスローされます。 セッションが期限切れになったときではなく、次の要求がプロバイダーに送信されるときのみ例外がスローされるため、アプリケーションは、プロバイダーからデータまたはメタデータを取得するときにはいつでもこれらの例外を処理できる必要があります。

セッションの終了

CloseEndsessionパラメーターの値を指定せずにメソッドが呼び出された場合、またはEndsessionパラメーターが True に設定されている場合は、セッションへの接続と、オブジェクトに関連付けられ AdomdConnection たセッションの両方が閉じられます。 セッションを閉じるために、ADOMD.NET は、セッション ID がプロパティの SessionID 値に設定された XMLA endsessionヘッダーをプロバイダーに送信します。

CloseEndsessionパラメーターを False に設定してメソッドを呼び出すと、オブジェクトに AdomdConnection 関連付けられているセッションはアクティブなままになりますが、セッションへの接続は閉じられます。

セッション管理の例

次の例では、接続を開いてセッションを作成し、セッションを ADOMD.NET で開いた状態で接続を閉じます。

Public Function CreateSession(ByVal connectionString As String) As String  
    Dim strSessionID As String = ""  
    Dim objConnection As New AdomdConnection  
  
    Try  
        ' First, try to connect to the specified data source.  
        ' If the connection string is not valid, or if the specified  
        ' provider does not support sessions, an exception is thrown.  
        objConnection.ConnectionString = connectionString  
        objConnection.Open()  
  
        ' Now that the connection is open, retrieve the new  
        ' active session ID.  
        strSessionID = objConnection.SessionID  
        ' Close the connection, but leave the session open.  
        objConnection.Close(False)  
        Return strSessionID  
  
    Finally  
        objConnection = Nothing  
    End Try  
End Function  
static string CreateSession(string connectionString)  
{  
    string strSessionID = "";  
    AdomdConnection objConnection = new AdomdConnection();  
    try  
    {  
        /*First, try to connect to the specified data source.  
          If the connection string is not valid, or if the specified  
          provider does not support sessions, an exception is thrown. */  
        objConnection.ConnectionString = connectionString;  
        objConnection.Open();  
  
        // Now that the connection is open, retrieve the new  
        // active session ID.  
        strSessionID = objConnection.SessionID;  
        // Close the connection, but leave the session open.  
        objConnection.Close(false);  
        return strSessionID;  
    }  
    finally  
    {  
        objConnection = null;  
    }  
}