我正在更新“数据源视图”中的维度定义。在SSIS脚本任务中使用C#代码执行此操作。下面是简化的C#代码:
DataSourceView ASDataSourceView;
//DataSourceView inherits from MajorObject
ASDataSourceView.Schema.Tables["DimTable"].ExtendedProperties["QueryDefinition"] = "SELECT * FROM ufc.TableWithData";
ASDataSourceView.Update();我需要处理可能在Update()方法中出现的错误。我认为尝试捕捉通常的方法会起作用,但似乎不是这样的。我需要以某种方式获得一个xml响应对象,然后检查它是否为空(没有错误),或者解析它并构建进一步的逻辑。
我试图阅读微软的文档,但不知道如何去做。XmlaWarningCollection类
当我在SSMS中运行update xml语句时,我会得到以下消息:当更新成功时:
<return xmlns="urn:schemas-microsoft-com:xml-analysis">
<root xmlns="urn:schemas-microsoft-com:xml-analysis:empty" />
</return>当update失败时(由于语法错误而失败,而不是逻辑,从模拟的角度来看也不太正确):
XML解析在第9597行第63列处失败:元素结束标记中的名称必须与开始标记中的元素类型匹配。运行完成
有人能帮忙吗?
发布于 2018-07-09 13:54:50
我想我终于找到了解决办法:
首先,您需要启用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);
}https://stackoverflow.com/questions/51175326
复制相似问题