/// <summary> /// Gets the variable dispenser wrapper. This method itself is just an abstraction for the condition compilation code. /// </summary> /// <param name="variableDispenser">The variable dispenser.</param> /// <returns>A version typed variable dispamser wrapper.</returns> private static IDTSVariableDispenserXX GetVariableDispenserWrapper(VariableDispenser variableDispenser) { #if YUKON IDTSVariableDispenserXX variableDispenserWrapper = DtsConvert.ToVariableDispenser90(variableDispenser); #else // KATMAI, DENALI, SQL2014, 2016 IDTSVariableDispenserXX variableDispenserWrapper = DtsConvert.GetExtendedInterface(variableDispenser); #endif return(variableDispenserWrapper); }
private string[] ScanDtsObjectVariablesForErrors(DtsContainer o) { List <string> listOtherErrors = new List <string>(); foreach (Variable v in o.Variables) { if (!v.SystemVariable && v.GetPackagePath().StartsWith(((IDTSPackagePath)o).GetPackagePath() + ".Variables[")) //only variables in this scope { object val; try { val = v.Value; //look at each value to see if each variable expression works } catch (Exception ex) { listOtherErrors.Add(ex.Message); continue; } //if we haven't already gotten an error, try to validate the expression IDTSInfoEventsWrapper events = new IDTSInfoEventsWrapper(); try { if (!string.IsNullOrEmpty(v.Expression)) { Microsoft.SqlServer.Dts.Runtime.Wrapper.ExpressionEvaluatorClass eval = new Microsoft.SqlServer.Dts.Runtime.Wrapper.ExpressionEvaluatorClass(); eval.Expression = v.Expression; eval.Events = events; #if KATMAI || DENALI || SQL2014 eval.Evaluate(DtsConvert.GetExtendedInterface(o.VariableDispenser), out val, false); #else eval.Evaluate(DtsConvert.ToVariableDispenser90(o.VariableDispenser), out val, false); #endif } } catch { if (events.Errors.Length > 0) { listOtherErrors.Add("Error in expression for variable " + v.QualifiedName + ": " + events.Errors[0]); } continue; } } } return(listOtherErrors.ToArray()); }