public static void VerifyReportParameters(Report report, Rdl rdl)
        {
            for (int i = 0; i < rdl.Items.Length; i++)
            {
                if (rdl.ItemsElementName[i].Equals(RdlChildElement.ReportParameters))
                {
                    RdlReportParameters reportParameters = (RdlReportParameters)rdl.Items[i];

                    foreach (RdlReportParameter reportParameter in reportParameters.ReportParameter)
                    {
                        IReportParameter target = report.ReportParameter(reportParameter.Name);

                        if (target == null)
                        {
                            throw new ReportParameterException("XML metadata is missing parameter: " + reportParameter.Name);
                        }

                        for (int j = 0; j < reportParameter.Items.Length; j++)
                        {
                            switch (reportParameter.ItemsElementName[j])
                            {
                            case RdlReportParameterChildElement.DataType:
                                ReportParameterDataType rpdt = (ReportParameterDataType)Enum.Parse(typeof(ReportParameterDataType), reportParameter.Items[j].ToString());
                                DbType dbType = XmlReportFactory.ToDbType(rpdt);
                                if (!target.DbType.Equals(dbType))
                                {
                                    throw new ReportParameterException("XML metadata mismatch (DataType)! Parameter: " + target.Name);
                                }
                                break;
                            }
                        }
                    }
                }
            }
        }
        private void Load()
        {
            XmlSerializer serializer = new XmlSerializer(typeof(Rdl));

            using (Stream s = GetReportStream())
            {
                report = (Rdl)serializer.Deserialize(s);
            }
        }
        public static void PopulateReportDataSources(Report report, Rdl rdl)
        {
            IList <IReportDataCommandTemplate> datasources = new List <IReportDataCommandTemplate>();

            for (int i = 0; i < rdl.Items.Length; i++)
            {
                if (rdl.ItemsElementName[i].Equals(RdlChildElement.DataSets))
                {
                    DataSets dataSets = (DataSets)rdl.Items[i];

                    foreach (DataSet dataSet in dataSets.DataSet)
                    {
                        ReportDataCommandTemplate reportDataCommandTemplate = new ReportDataCommandTemplate(dataSet.Name);
                        ReportDataMap             reportDataMap             = new ReportDataMap();
                        foreach (object dataSetItem in dataSet.Items)
                        {
                            DataSetQuery queryType       = dataSetItem as DataSetQuery;
                            RdlFields    fieldCollection = dataSetItem as RdlFields;

                            if (queryType != null)
                            {
                                for (int j = 0; j < queryType.Items.Length; j++)
                                {
                                    switch (queryType.ItemsElementName[j])
                                    {
                                    case DataSetQueryChildElement.CommandType:
                                        reportDataCommandTemplate.CommandType = (CommandType)Enum.Parse(typeof(CommandType), queryType.Items[j].ToString());
                                        break;

                                    case DataSetQueryChildElement.CommandText:
                                        reportDataCommandTemplate.CommandText = queryType.Items[j].ToString();
                                        break;

                                    case DataSetQueryChildElement.QueryParameters:
                                        DataSetQueryParameters queryParameters = (DataSetQueryParameters)queryType.Items[j];
                                        foreach (DataSetQueryParameter queryParameter in queryParameters.QueryParameter)
                                        {
                                            string xname = queryParameter.Name;
                                            if (xname.StartsWith("@", StringComparison.OrdinalIgnoreCase))
                                            {
                                                xname = queryParameter.Name.Substring(1);
                                            }
                                            IDataParameterTemplate parameter = report.ReportParameter(xname);
                                            if (parameter == null)
                                            {
                                                throw new ReportParameterException(
                                                          "Report does not define parameter: " + xname);
                                            }
                                            reportDataCommandTemplate.Parameters.Add(parameter);
                                        }
                                        break;

                                    case DataSetQueryChildElement.DataSourceName:
                                        reportDataCommandTemplate.DataSourceName = queryType.Items[j].ToString();
                                        break;
                                    }
                                }
                            }
                            else if (fieldCollection != null)
                            {
                                RdlField[] fields = fieldCollection.Field;
                                for (int c = 0; c < fields.Length; c++)
                                {
                                    DataMapEntry newEntry = new DataMapEntry();
                                    newEntry.FieldName = fields[c].Name;
                                    for (int d = 0; d < fields[c].ItemsElementName.Length; d++)
                                    {
                                        switch (fields[c].ItemsElementName[d])
                                        {
                                        case RdlFieldType.Item:
                                            if (fields[c].Items[d] is System.Xml.XmlElement)
                                            {
                                                newEntry.TypeName = ((System.Xml.XmlElement)fields[c].Items[d]).InnerText;
                                            }
                                            break;

                                        case RdlFieldType.DataField:
                                            newEntry.ColumnName = fields[c].Items[d].ToString();
                                            break;
                                        }
                                    }
                                    reportDataMap.AddDataMapEntry(newEntry);
                                }
                            }
                        }
                        reportDataCommandTemplate.DataMap = reportDataMap;
                        datasources.Add(reportDataCommandTemplate);
                    }
                }
            }

            report.ReportDataCommandTemplates = datasources;
        }