internal static AdomdDataReader CreateInstance(XmlReader xmlReader, CommandBehavior commandBehavior, AdomdConnection connection)
 {
     if (connection == null)
     {
         throw new ArgumentNullException("connection");
     }
     if (xmlReader == null)
     {
         throw new ArgumentNullException("xmlReader");
     }
     XmlaClient.ReadUptoRoot(xmlReader);
     if (XmlaClient.IsAffectedObjectsResponseS(xmlReader))
     {
         return(new AdomdAffectedObjectsReader(xmlReader, commandBehavior, connection));
     }
     return(new AdomdDataReader(xmlReader, commandBehavior, connection, true));
 }
 internal XmlaDataReader(XmlReader xmlReader, CommandBehavior commandBehavior, bool isXmlReaderAtRoot, IXmlaDataReaderOwner owner)
 {
     this.columnNameLookup    = new Hashtable();
     this.columnXmlNameLookup = new Hashtable();
     this.rowsetNames         = new List <string>();
     this.rowElement          = FormattersHelpers.RowElement;
     this.rowNamespace        = FormattersHelpers.RowElementNamespace;
     this.readersXmlDepth     = -1;
     //base..ctor();
     try
     {
         this.InternalInitialize(xmlReader, commandBehavior, owner);
         if (!isXmlReaderAtRoot)
         {
             XmlaClient.ReadUptoRoot(xmlReader);
         }
         this.IsAffectedObjects = XmlaClient.IsAffectedObjectsResponseS(xmlReader);
         this.isMultipleResult  = (this.IsAffectedObjects || XmlaClient.IsMultipleResultResponseS(xmlReader));
         this.Results           = new XmlaResultCollection();
         this.CollectTopLevelAttributes();
         if (XmlaClient.IsRowsetResponseS(xmlReader))
         {
             this.RowsetName = xmlReader.GetAttribute("name");
             this.rowsetNames.Add(this.RowsetName);
             this.EnsureResultForNewRowset();
             XmlaClient.StartRowsetResponseS(xmlReader);
             this.LoadResponseSchema();
         }
         else if (XmlaClient.IsMultipleResultResponseS(xmlReader) || XmlaClient.IsAffectedObjectsResponseS(xmlReader))
         {
             XmlaClient.StartElementS(xmlReader, this.IsAffectedObjects ? "AffectedObjects" : "results", "http://schemas.microsoft.com/analysisservices/2003/xmla-multipleresults");
             if (XmlaClient.IsRootElementS(xmlReader))
             {
                 this.InternalNextResult(true);
             }
             else
             {
                 if (!this.IsAffectedObjects)
                 {
                     throw new AdomdUnknownResponseException(XmlaSR.UnknownServerResponseFormat, "Expected at least one root element");
                 }
                 this.StartEmptyAffectedObjects();
             }
         }
         else
         {
             if (XmlaClient.IsDatasetResponseS(xmlReader))
             {
                 throw new AdomdUnknownResponseException(XmlaSR.Resultset_IsNotRowset, string.Format(CultureInfo.InvariantCulture, "Got {0}:{1}", new object[]
                 {
                     "urn:schemas-microsoft-com:xml-analysis:mddataset",
                     "root"
                 }));
             }
             if (!XmlaClient.IsEmptyResultS(xmlReader))
             {
                 throw new AdomdUnknownResponseException(XmlaSR.UnknownServerResponseFormat, string.Format(CultureInfo.InvariantCulture, "Expected {0}:{1}, got {2}", new object[]
                 {
                     "urn:schemas-microsoft-com:xml-analysis:empty",
                     "root",
                     xmlReader.Name
                 }));
             }
             XmlaClient.ReadEmptyRootS(xmlReader);
             throw new AdomdUnknownResponseException(XmlaSR.Resultset_IsNotRowset, string.Format(CultureInfo.InvariantCulture, "Unexpected node {0}", new object[]
             {
                 xmlReader.Name
             }));
         }
     }
     catch (AdomdUnknownResponseException)
     {
         xmlReader.Close();
         throw;
     }
     catch (AdomdConnectionException)
     {
         throw;
     }
     catch (XmlException innerException)
     {
         xmlReader.Close();
         throw new AdomdUnknownResponseException(XmlaSR.UnknownServerResponseFormat, innerException);
     }
     catch (IOException innerException2)
     {
         if (this.owner != null)
         {
             owner.CloseConnection(false);
         }
         throw new AdomdConnectionException(XmlaSR.ConnectionBroken, innerException2);
     }
     catch (XmlaException innerException3)
     {
         xmlReader.Close();
         throw new AdomdErrorResponseException(innerException3);
     }
     catch
     {
         if (this.owner != null)
         {
             owner.CloseConnection(false);
         }
         throw;
     }
 }
        public XmlReader ExecuteXmlReader()
        {
            this.CheckCanExecute();
            XmlaReader xmlaReader = this.connection.IExecuteProvider.Execute(this, this.Properties, this.PrivateParameters);

            this.Connection.OpenedReader = null;
            if (xmlaReader == null)
            {
                return(null);
            }
            XmlReader result;

            try
            {
                XmlaClient.ReadUptoRoot(xmlaReader);
                if (!XmlaClient.IsRowsetResponseS(xmlaReader) && !XmlaClient.IsDatasetResponseS(xmlaReader))
                {
                    this.connection.MarkCacheNeedsCheckForValidness();
                }
                xmlaReader.MaskEndOfStream   = true;
                xmlaReader.SkipElements      = false;
                this.Connection.OpenedReader = xmlaReader;
                result = xmlaReader;
            }
            catch (AdomdUnknownResponseException)
            {
                if (xmlaReader != null)
                {
                    xmlaReader.Close();
                }
                throw;
            }
            catch (AdomdConnectionException)
            {
                throw;
            }
            catch (XmlException innerException)
            {
                if (xmlaReader != null)
                {
                    xmlaReader.Close();
                }
                throw new AdomdUnknownResponseException(XmlaSR.UnknownServerResponseFormat, innerException);
            }
            catch (IOException innerException2)
            {
                if (this.connection != null)
                {
                    this.connection.Close(false);
                }
                throw new AdomdConnectionException(XmlaSR.ConnectionBroken, innerException2);
            }
            catch (XmlaException innerException3)
            {
                if (xmlaReader != null)
                {
                    xmlaReader.Close();
                }
                throw new AdomdErrorResponseException(innerException3);
            }
            catch
            {
                if (this.connection != null)
                {
                    this.connection.Close(false);
                }
                throw;
            }
            return(result);
        }