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





1.00/5 (1投票)
建立与 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)。因此,会话概念非常有用。