65.9K
CodeProject 正在变化。 阅读更多。
Home

建立与示例的现有连接:XML/A 脚本执行跟踪

starIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

1.00/5 (1投票)

2009 年 12 月 26 日

CPOL

1分钟阅读

viewsIcon

13529

建立与 SQL Server 的现有连接,并进行 XML/A 脚本执行跟踪。

引言

如果您需要建立一个现有连接并将下一个对象绑定到它,您必须使用会话 ID。每个 SQL Server 连接对象(我的意思是,在每个对象的模型中)都有一个属性,SessionID(要连接的会话)。首先,我们像往常一样连接到服务器,然后每次想要重用现有连接时,我们都使用此连接的会话 ID。

最初,我尝试将 "Context Connection=true" 传递给连接字符串,但这会导致异常:“'Context Connection' 属性名称格式不正确。” 此技术只能在 SQL Server CLR 集成中使用。

您可以为每个操作使用单独的连接,或者您可以保留连接并每次需要时将其传递给命令。是的,这是一个解决方案,但如果您必须在命令执行期间从一个对象模型(例如,Analysis Management Objects)保留连接到另一个对象模型(例如,ADOMD.NET),则无法实现。我将向您展示我的意思。

XML/A 脚本执行跟踪

...
Server server = new Server();
server.Connect("localhost");
string sessionID = server.SessionID;  //keep for future usage
if (server.Connected)
{

    server.SessionTrace.OnEvent += 
      new TraceEventHandler(SessionTrace_OnEvent);
    server.SessionTrace.Start();

    ExecuteScript("XML/A script", sessionID);

    server.SessionTrace.Stop();
    server.Disconnect();
}
server.Dispose();
server = null;

...

static void SessionTrace_OnEvent(object sender, TraceEventArgs e)
{
    Debug.WriteLine(e.TextData);
}
...

public void ExecuteScript(string xmlaScript, string sessionID)
{
    //execute script using AS connection string
    using (AdomdConnection conn = new AdomdConnection(SSASConnectionString))
    {
        conn.SessionID = sessionID;   //use existent connection
        conn.Open();

        AdomdCommand cmd = new AdomdCommand(xmlaScript, conn);
        cmd.ExecuteNonQuery();

        conn.Close();
    }
}

如果您不使用相同的会话,您的 SQL Server 跟踪将在您创建 ADOMD.NET 连接时立即终止,并且所有脚本执行都将静默处理。SessionID 允许您将连接从一个对象模型传递到另一个对象模型(例如,从 AMO 到 ADOMD.NET)。因此,会话概念非常有用。

© . All rights reserved.