C# 处理Microsoft.AnalysisServices更新方法上的错误

C# 处理Microsoft.AnalysisServices更新方法上的错误,c#,sql-server,error-handling,ssis,ssas,C#,Sql Server,Error Handling,Ssis,Ssas,我正在“数据源视图”中更新维度定义。在SSIS脚本任务中使用C#代码完成。 下面是简化的C代码: 我需要处理Update()方法期间可能出现的错误。 我认为通常的尝试捕捉方法会奏效,但似乎不是这样。 我需要以某种方式获取一个xml响应对象,然后检查它是否为空(没有错误),或者解析它并构建进一步的逻辑 我试图阅读微软的文档,但不知道怎么做。 在SSMS中运行update xml语句时,会收到以下消息: 更新成功时: <return xmlns="urn:schemas-microsoft-

我正在“数据源视图”中更新维度定义。在SSIS脚本任务中使用C#代码完成。 下面是简化的C代码:

我需要处理Update()方法期间可能出现的错误。 我认为通常的尝试捕捉方法会奏效,但似乎不是这样。 我需要以某种方式获取一个xml响应对象,然后检查它是否为空(没有错误),或者解析它并构建进一步的逻辑

我试图阅读微软的文档,但不知道怎么做。

在SSMS中运行update xml语句时,会收到以下消息: 更新成功时:

<return xmlns="urn:schemas-microsoft-com:xml-analysis">
  <root xmlns="urn:schemas-microsoft-com:xml-analysis:empty" />
</return>

更新失败时(由于语法错误而失败,而非逻辑,从模拟的角度来看,这也不是非常正确):

XML解析在第9597行第63列失败:元素的end标记中的名称必须与start标记中的元素类型匹配。 完成


有人能帮忙吗

我想我终于找到了解决办法:

首先,您需要启用CaptureXML选项

ServerName.CaptureXml = true;
使用XmlaResultCollection选项第二次运行更新:

UpdateOptions uo = default(UpdateOptions);
UpdateMode om = default(UpdateMode);
XmlaWarningCollection xm = null;
ASDataSourceView.Update(uo, om, xm);
第三步执行update语句:

XmlaResultCollection resultCollection = ServerName.ExecuteCaptureLog(false, false);
之后,我能够解析resultCollection对象:

String ErrorMessages = String.Empty;

if (resultCollection.ContainsErrors) {
                ErrorMessages += $"Errors occured in cube {ConnectionString.CatalogName}:" + Environment.NewLine;
                foreach (AS.XmlaResult result in resultCol) {
                    foreach (object error in result.Messages) {
                        if (error.GetType() == typeof(AS.XmlaError))
                            ErrorMessages += "ERR: " + ((AS.XmlaError)error).Description + Environment.NewLine;
                        else if (error.GetType() == typeof(AS.XmlaWarning))
                            ErrorMessages += "WARN: " + ((AS.XmlaWarning)error).Description + Environment.NewLine;
                    }
                }
                throw new Exception(ErrorMessages);
            }
String ErrorMessages = String.Empty;

if (resultCollection.ContainsErrors) {
                ErrorMessages += $"Errors occured in cube {ConnectionString.CatalogName}:" + Environment.NewLine;
                foreach (AS.XmlaResult result in resultCol) {
                    foreach (object error in result.Messages) {
                        if (error.GetType() == typeof(AS.XmlaError))
                            ErrorMessages += "ERR: " + ((AS.XmlaError)error).Description + Environment.NewLine;
                        else if (error.GetType() == typeof(AS.XmlaWarning))
                            ErrorMessages += "WARN: " + ((AS.XmlaWarning)error).Description + Environment.NewLine;
                    }
                }
                throw new Exception(ErrorMessages);
            }