AMO代码处理SSAS多维数据集的问题
0
我在SSIS的脚本组件中写了一段代码去处理SSAS的Cube:
Partition p = mg.Partitions;
Partition p1 = mg.Partitions.FindByName(mg.Name + "_" + dtEnd.ToString("yyyy-MM-dd"));
string sql = ((QueryBinding)p.Source).QueryDefinition.ToString();
string sql_now = sql.Replace("2000-01-01", dtEnd.ToString("yyyy-MM-dd"));
if (p1 != null)
p1.Drop();
p1 = mg.Partitions.Add(mg.Name + "_" + dtEnd.ToString("yyyy-MM-dd"));
p1.StorageMode = StorageMode.Molap;
p1.ProcessingMode = ProcessingMode.Regular;
p1.Source = new QueryBinding(db.DataSourceViews.DataSourceID, sql_now);
p1.Update(UpdateOptions.ExpandFull);
//p1.ErrorConfiguration.KeyNotFound = ErrorOption.ReportAndContinue;
p1.Process(ProcessType.ProcessFull);
为什么加上p1.ErrorConfiguration.KeyNotFound = ErrorOption.ReportAndContinue 这段代码就会报错:
错误: System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.NullReferenceException: 未将对象引用设置到对象的实例。
在 ST_9bca6304427a48fd9d2a2da63602c5e0.csproj.ScriptMain.Main()
--- 内部异常堆栈跟踪的结尾 ---
在 System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
在 System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
在 Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()
而注释掉就正常了呢?
Partition p = mg.Partitions;
Partition p1 = mg.Partitions.FindByName(mg.Name + "_" + dtEnd.ToString("yyyy-MM-dd"));
string sql = ((QueryBinding)p.Source).QueryDefinition.ToString();
string sql_now = sql.Replace("2000-01-01", dtEnd.ToString("yyyy-MM-dd"));
if (p1 != null)
p1.Drop();
p1 = mg.Partitions.Add(mg.Name + "_" + dtEnd.ToString("yyyy-MM-dd"));
p1.StorageMode = StorageMode.Molap;
p1.ProcessingMode = ProcessingMode.Regular;
p1.Source = new QueryBinding(db.DataSourceViews.DataSourceID, sql_now);
p1.Update(UpdateOptions.ExpandFull);
//p1.ErrorConfiguration.KeyNotFound = ErrorOption.ReportAndContinue;
p1.Process(ProcessType.ProcessFull);
为什么加上p1.ErrorConfiguration.KeyNotFound = ErrorOption.ReportAndContinue 这段代码就会报错:
错误: System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.NullReferenceException: 未将对象引用设置到对象的实例。
在 ST_9bca6304427a48fd9d2a2da63602c5e0.csproj.ScriptMain.Main()
--- 内部异常堆栈跟踪的结尾 ---
在 System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
在 System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
在 Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()
而注释掉就正常了呢?
没有找到相关结果
重要提示:提问者不能发表回复,可以通过评论与回答者沟通,沟通后可以通过编辑功能完善问题描述,以便后续其他人能够更容易理解问题.
1 个回复
Donny 2013-08-10 回答
赞同来自: 梁勇
p1.Process(ProcessType.ProcessFull);
修改为
ErrorConfiguration ec = new ErrorConfiguration();
ec.KeyNotFound = ErrorOption.ReportAndContinue;
p1.Process(ProcessType.ProcessFull,ec);
就可以正常运行了。。。不知道为什么原因。。。。奇怪。