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;
     }
 }