共用方式為


使用連接和 ADOMD.NET 中的工作階段

在 XML for Analysis (XMLA) 中,工作階段可支援分析資料存取期間可設定狀態的作業。工作階段會為分析資料來源界定命令與交易的範圍和內容。用以管理工作階段的 XMLA 元素是 BeginSessionSessionEndSession

ADOMD.NET 會在您開始工作階段時、在工作階段期間查詢或是擷取資料時,以及關閉工作階段時分別使用這三個 XMLA 工作階段元素。

開始工作階段

AdomdConnection 物件的 SessionID 屬性會包含與 AdomdConnection 物件關聯的使用中工作階段之識別碼。透過正確地使用這個屬性,您可以在應用程式中有效地控制用戶端與伺服器 Statefulness。

  • 如果在呼叫 Open 方法時,SessionID 屬性不是設定為有效的工作階段識別碼,AdomdConnection 物件會向提供者要求新的工作階段識別碼。ADOMD.NET 透過將 XMLA BeginSession 標頭傳送到提供者,來起始工作階段。如果 ADOMD.NET 成功啟動工作階段,ADOMD.NET 會將 SessionID 屬性值設定為新建立工作階段的工作階段識別碼。

  • 如果在呼叫 Open 方法時,SessionID 屬性是設定為有效的工作階段識別碼,AdomdConnection 物件會嘗試連接到指定的工作階段。

如果 AdomdConnection 物件無法連接到指定的工作階段,或者如果提供者不支援工作階段,就會擲回例外狀況。

[!附註]

在使 ADOMD.NET 建立一個工作階段之後,您可以將多個 AdomdConnection 物件連接到單一使用中工作階段,或者可以從該工作階段中斷連接單一 AdomdConnection 物件,然後將該物件重新連接到另一個工作階段。

在工作階段中工作

ADOMD.NET 將 AdomdConnection 物件連接到有效工作階段之後,會針對應用程式所提出的每個資料或中繼資料要求,將 XMLA Session 標頭傳送到提供者。每個要求會將工作階段識別碼設定成 SessionID 屬性的值。

工作階段識別碼並不保證工作階段會維持有效狀態。如果工作階段到期 (例如,如果工作階段逾時或是喪失連接),提供者可以選擇結束和回復該工作階段的動作。如果發生這個情況,所有之後從 AdomdConnection 物件呼叫的方法都將擲回例外狀況。因為只有在下一個要求傳送到提供者時才會擲回例外狀況,而不是在工作階段到期時,所以您的應用程式從提供者擷取資料或中繼資料的期間,必須能夠隨時處理這些例外狀況。

關閉工作階段

如果在呼叫 Close 方法時,沒有指定 endSession 參數的值,或者如果 endSession 參數是設定為 True,則會關閉工作階段連接以及與 AdomdConnection 物件關聯的工作階段。為了關閉工作階段,ADOMD.NET 會將 XMLA EndSession 標頭傳送到提供者,並將工作階段識別碼設定為 SessionID 屬性的值。

如果在呼叫 Close 方法時,將 endSession 參數設定為 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;
    }
}