Я использую Microsoft.AnalysisServices.dll и обрабатываю кубы и базы данных на SQL Analysis Server. Я получаю трассировку от SQL к моему коду (C #). С помощью этого следа я визуализирую события. Пока все в порядке. Если два или более идентификатора сеанса обнаруживаются, моя визуализация не работает, потому что все смешано. Поэтому я хочу отфильтровать трассировку по SessionID. Но я не знаю, как это сделать.
Я пробовал свойство «Фильтр» в «Trace», но оно не работало.
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