我正在使用Microsoft.AnalysisServices.dll,并且在SQL Analysis Server上处理多维数据集和数据库。我从SQL跟踪到我的代码(C#)。通过使用此跟踪,我可以看到事件。暂时一切都很好。如果要跟踪两个或多个sessionID,则我的可视化将无法正常工作,因为一切都混合了。所以我想通过SessionID过滤跟踪。但是我不知道该怎么做。
我尝试了“跟踪”的“过滤器”属性,但无效。
Dim xmlString = "<And>
<Like>
<ColumnID>39</ColumnID>
<Value>0C2E42EB-11CD-40B2-9D65-E2FAB4D1378D</Value>
</Like>
</And>"
Dim xml As Xml.XmlDocument = New Xml.XmlDocument()
xml.LoadXml(xmlString)
trc.Filter = xml.DocumentElement
这是我的代码。
trc = server.Traces.FindByName("TestServerTraces")
If trc IsNot Nothing Then trc.Drop()
trc = server.Traces.Add("TestServerTraces", "TestServerTraces")
Dim onTraceEvent As New TraceEventHandler(AddressOf DefaultTrace_OnEvent_Invoke)
Dim onTraceStopped As New TraceStoppedEventHandler(AddressOf DefaultTrace_Stopped_Invoke)
AddHandler trc.OnEvent, onTraceEvent
AddHandler trc.Stopped, onTraceStopped
trc.LogFileName = ("TestServerTraces_" & (CType((DateTime.Now.Year * 10000 + DateTime.Now.Month * 100 + DateTime.Now.Day), Int64)).ToString() & "_" + (CType((DateTime.Now.Hour * 10000 + DateTime.Now.Minute * 100 + DateTime.Now.Second), Int64)).ToString() & ".trc")
trc.LogFileSize = 100
trc.LogFileRollover = True
trc.AutoRestart = False
#Region "Trace Columns"
trc.Events.Clear()
#Region "ProgressReportBegin Columns"
te = trc.Events.Add(TraceEventClass.ProgressReportBegin)
te.Columns.Add(TraceColumn.EventClass)
te.Columns.Add(TraceColumn.EventSubclass)
te.Columns.Add(TraceColumn.CurrentTime)
te.Columns.Add(TraceColumn.StartTime)
te.Columns.Add(TraceColumn.JobID)
te.Columns.Add(TraceColumn.SessionType)
te.Columns.Add(TraceColumn.ObjectID)
te.Columns.Add(TraceColumn.ObjectType)
te.Columns.Add(TraceColumn.ObjectName)
te.Columns.Add(TraceColumn.ObjectPath)
te.Columns.Add(TraceColumn.ObjectReference)
te.Columns.Add(TraceColumn.ConnectionID)
te.Columns.Add(TraceColumn.DatabaseName)
te.Columns.Add(TraceColumn.NTUserName)
te.Columns.Add(TraceColumn.NTDomainName)
te.Columns.Add(TraceColumn.SessionID)
te.Columns.Add(TraceColumn.NTCanonicalUserName)
te.Columns.Add(TraceColumn.Spid)
te.Columns.Add(TraceColumn.TextData)
te.Columns.Add(TraceColumn.ServerName)
#End Region
#Region "ProgressReportCurrent Columns"
te = trc.Events.Add(TraceEventClass.ProgressReportCurrent)
te.Columns.Add(TraceColumn.EventClass)
te.Columns.Add(TraceColumn.EventSubclass)
te.Columns.Add(TraceColumn.CurrentTime)
te.Columns.Add(TraceColumn.StartTime)
te.Columns.Add(TraceColumn.JobID)
te.Columns.Add(TraceColumn.SessionType)
te.Columns.Add(TraceColumn.ProgressTotal)
te.Columns.Add(TraceColumn.IntegerData)
te.Columns.Add(TraceColumn.ObjectID)
te.Columns.Add(TraceColumn.ObjectType)
te.Columns.Add(TraceColumn.ObjectName)
te.Columns.Add(TraceColumn.ObjectPath)
te.Columns.Add(TraceColumn.ObjectReference)
te.Columns.Add(TraceColumn.ConnectionID)
te.Columns.Add(TraceColumn.DatabaseName)
te.Columns.Add(TraceColumn.SessionID)
te.Columns.Add(TraceColumn.Spid)
te.Columns.Add(TraceColumn.TextData)
te.Columns.Add(TraceColumn.ServerName)
#End Region
#Region "ProgressReportEnd Columns"
te = trc.Events.Add(TraceEventClass.ProgressReportEnd)
te.Columns.Add(TraceColumn.EventClass)
te.Columns.Add(TraceColumn.EventSubclass)
te.Columns.Add(TraceColumn.CurrentTime)
te.Columns.Add(TraceColumn.StartTime)
te.Columns.Add(TraceColumn.JobID)
te.Columns.Add(TraceColumn.SessionType)
te.Columns.Add(TraceColumn.ProgressTotal)
te.Columns.Add(TraceColumn.IntegerData)
te.Columns.Add(TraceColumn.ObjectID)
te.Columns.Add(TraceColumn.ObjectType)
te.Columns.Add(TraceColumn.ObjectName)
te.Columns.Add(TraceColumn.ObjectPath)
te.Columns.Add(TraceColumn.ObjectReference)
te.Columns.Add(TraceColumn.ConnectionID)
te.Columns.Add(TraceColumn.DatabaseName)
te.Columns.Add(TraceColumn.SessionID)
te.Columns.Add(TraceColumn.Spid)
te.Columns.Add(TraceColumn.TextData)
te.Columns.Add(TraceColumn.ServerName)
#End Region
#Region "ProgressReportError Columns"
te = trc.Events.Add(TraceEventClass.ProgressReportError)
te.Columns.Add(TraceColumn.EventClass)
te.Columns.Add(TraceColumn.EventSubclass)
te.Columns.Add(TraceColumn.CurrentTime)
te.Columns.Add(TraceColumn.StartTime)
te.Columns.Add(TraceColumn.EndTime)
te.Columns.Add(TraceColumn.Duration)
te.Columns.Add(TraceColumn.JobID)
te.Columns.Add(TraceColumn.SessionType)
te.Columns.Add(TraceColumn.ProgressTotal)
te.Columns.Add(TraceColumn.IntegerData)
te.Columns.Add(TraceColumn.ObjectID)
te.Columns.Add(TraceColumn.ObjectType)
te.Columns.Add(TraceColumn.ObjectName)
te.Columns.Add(TraceColumn.ObjectPath)
te.Columns.Add(TraceColumn.ObjectReference)
te.Columns.Add(TraceColumn.Severity)
te.Columns.Add(TraceColumn.Error)
te.Columns.Add(TraceColumn.ConnectionID)
te.Columns.Add(TraceColumn.DatabaseName)
te.Columns.Add(TraceColumn.SessionID)
te.Columns.Add(TraceColumn.Spid)
te.Columns.Add(TraceColumn.TextData)
te.Columns.Add(TraceColumn.ServerName)
#End Region
#End Region
Try
If processObject.GetType Is GetType(Database) Then
processObject.Process(ProcessType.ProcessFull)
Else
processObject.Process(ProcessType.ProcessData)
End If
lblStatus.Text = "Processing completed successfully"
PictureBox1.Image = My.Resources.accept
isProcessing = False
Catch ex As Exception
errorMesages = ex.Message.Split({Environment.NewLine}, StringSplitOptions.None)
isProcessing = False
If Not infoNodeAdded Then
infoNode = ProcessTree.AppendNode(New Object() {"Hatalar ve Uyarılar"}, parentForRootNodes, "infoNode")
infoNodeAdded = True
For i As Integer = 0 To errorMesages.Length - 2
Dim errorNode As TreeListNode = ProcessTree.AppendNode(New Object() {errorMesages(i)}, infoNode, "error")
Next
End If
lblStatus.Text = String.Format("Processing failed: {0}", ex.Message)
PictureBox1.Image = My.Resources._error
End Try
'process.Start()
'trc.Stop()
'trc.Drop()
我需要具有由SessionID过滤的跟踪。
感谢您的帮助:D