示例#1
0
        private static ResultsetFormatter ReadRowsetResponsePrivate(XmlReader reader, InlineErrorHandlingType inlineErrorHandling, DataTable inTable, bool schemaOnly, Dictionary <string, bool> columnsToConvertTimeFor)
        {
            RowsetFormatter rowsetFormatter = new RowsetFormatter();

            if (reader.IsEmptyElement)
            {
                reader.Skip();
            }
            else
            {
                XmlaClient.StartRowsetResponseS(reader);
                rowsetFormatter.ReadRowset(reader, inlineErrorHandling, inTable, inTable == null || inTable.Columns.Count <= 1, schemaOnly, columnsToConvertTimeFor);
                XmlaClient.EndRowsetResponseS(reader);
            }
            return(rowsetFormatter);
        }
 private bool InternalNextResult(bool first)
 {
     if (!first)
     {
         this.InitResultData();
         this.SkipRootContents();
     }
     if (XmlaClient.IsEmptyResultS(this.xmlReader))
     {
         if (this.IsAffectedObjects)
         {
             throw new AdomdUnknownResponseException(XmlaSR.UnknownServerResponseFormat, "Got an empty result inside AffectedObjects");
         }
         this.RowsetName = null;
         this.xmlReader.ReadStartElement("root", "urn:schemas-microsoft-com:xml-analysis:empty");
         this.GenerateSchemaForEmptyResult();
         this.emptyResult = true;
         this.EnsureResultForNewRowset();
         return(true);
     }
     else
     {
         if (this.xmlReader.IsStartElement("root", "urn:schemas-microsoft-com:xml-analysis:rowset"))
         {
             this.RowsetName = this.xmlReader.GetAttribute("name");
             this.rowsetNames.Add(this.RowsetName);
             XmlaClient.StartRowsetResponseS(this.xmlReader);
             this.LoadResponseSchema();
             this.dataReady   = true;
             this.emptyResult = false;
             this.EnsureResultForNewRowset();
             return(true);
         }
         if (first)
         {
             throw new AdomdUnknownResponseException(XmlaSR.UnknownServerResponseFormat, "Expected at least one root element");
         }
         this.CheckForMessages();
         XmlaClient.EndElementS(this.xmlReader, this.IsAffectedObjects ? "AffectedObjects" : "results", "http://schemas.microsoft.com/analysisservices/2003/xmla-multipleresults");
         this.isMultipleResult = false;
         return(false);
     }
 }
 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;
     }
 }