예제 #1
0
        public virtual void Flush()
        {
            bool connectionErrorFound = false;

            try
            {
                Instance.AcquireConnections(null);
            }
            catch (System.Runtime.InteropServices.COMException e)
            {
                if (e.ErrorCode == -1071611876)
                {
                    connectionErrorFound = true;
                    var connection = _astTransformationNode.FirstChildOfType <AstConnectionNode>();
                    MessageEngine.Trace(_astTransformationNode, Severity.Error, "V0203", "Could not connect to {0} for validation.", connection.Name);
                }
                else
                {
                    MessageEngine.Trace(_astTransformationNode, Severity.Error, null, GetScrubbedErrorDescription(e.ErrorCode));
                }
            }
            catch (System.Runtime.InteropServices.SEHException seh)
            {
                MessageEngine.Trace(_astTransformationNode, Severity.Error, null, "Internal SSIS Object Corruption when calling AcquireConnections HRESULT: {0}\n{1}", seh.ErrorCode.ToString("X"), seh.ToString());
            }

            try
            {
                Instance.ReinitializeMetaData();
            }
            catch (System.Runtime.InteropServices.COMException e)
            {
                if (e.ErrorCode == -1071636248)
                {
                    var    table   = _astTransformationNode.FirstChildOfType <AstTableNode>();
                    string refName = table != null ? table.Name : "table";
                    MessageEngine.Trace(_astTransformationNode, Severity.Error, "V0203", "Failed to open {0} for validation.", refName);
                }
                else if (!connectionErrorFound || e.ErrorCode != -1071636446)
                {
                    MessageEngine.Trace(_astTransformationNode, Severity.Error, "V0210", GetScrubbedErrorDescription(e.ErrorCode));
                }
            }

            Instance.ReleaseConnections();
        }