/*
         * cavaets:
         * doesn't handle varchar(max) DSV columns as the DSV doesn't report the length. The length needs to be set manually on the KeyColumn or NameColumn
         */
        private void CheckDataTypeDiscrepancies(DataItem di, ColumnType ColumnType)
        {
            if (di == null) return;

            ColumnBinding cb = di.Source as ColumnBinding;
            if (cb == null) return;

            IModelComponent parent = di.Parent;
            while (parent != null && !(parent is DimensionAttribute))
                parent = parent.Parent;
            DimensionAttribute da = (DimensionAttribute)parent;

            if (!da.Parent.DataSourceView.Schema.Tables.Contains(cb.TableID)) return;
            if (!da.Parent.DataSourceView.Schema.Tables[cb.TableID].Columns.Contains(cb.ColumnID)) return;
            DataColumn col = da.Parent.DataSourceView.Schema.Tables[cb.TableID].Columns[cb.ColumnID];

            if (ColumnType == ColumnType.NameColumn)
            {
                if (col.MaxLength <= 0) return;
                if (col.DataType != typeof(string)) return;
                if (di.DataType != OleDbType.WChar) return;
                if (col.MaxLength != di.DataSize)
                {
                    DataTypeDiscrepancy discrepancy = new DataTypeDiscrepancy();
                    discrepancy.AnalysisServicesColumnType = ColumnType;
                    discrepancy.AnalysisServicesColumn = di;
                    discrepancy.DimensionAttribute = da;
                    discrepancy.DSVColumn = col;
                    listDiscrepancies.Add(discrepancy);
                }
            }
            else //KeyColumn
            {
                bool bDiscrepancy = false;
                if (Microsoft.AnalysisServices.OleDbTypeConverter.Convert(di.DataType) != col.DataType && Microsoft.AnalysisServices.OleDbTypeConverter.GetRestrictedOleDbType(col.DataType) != di.DataType)
                    bDiscrepancy = true;
                if (di.DataSize >= 0 && col.MaxLength >= 0 && di.DataSize != col.MaxLength)
                    bDiscrepancy = true;
                if (bDiscrepancy)
                {
                    DataTypeDiscrepancy discrepancy = new DataTypeDiscrepancy();
                    discrepancy.AnalysisServicesColumnType = ColumnType;
                    discrepancy.AnalysisServicesColumn = di;
                    discrepancy.DimensionAttribute = da;
                    discrepancy.DSVColumn = col;
                    listDiscrepancies.Add(discrepancy);
                }
            }
        }
Esempio n. 2
0
        /*
         * cavaets:
         * doesn't handle varchar(max) DSV columns as the DSV doesn't report the length. The length needs to be set manually on the KeyColumn or NameColumn
         */
        private void CheckDataTypeDiscrepancies(DataItem di, ColumnType ColumnType)
        {
            if (di == null)
            {
                return;
            }

            ColumnBinding cb = di.Source as ColumnBinding;

            if (cb == null)
            {
                return;
            }

            IModelComponent parent = di.Parent;

            while (parent != null && !(parent is DimensionAttribute))
            {
                parent = parent.Parent;
            }
            DimensionAttribute da = (DimensionAttribute)parent;

            if (!da.Parent.DataSourceView.Schema.Tables.Contains(cb.TableID))
            {
                return;
            }
            if (!da.Parent.DataSourceView.Schema.Tables[cb.TableID].Columns.Contains(cb.ColumnID))
            {
                return;
            }
            DataColumn col = da.Parent.DataSourceView.Schema.Tables[cb.TableID].Columns[cb.ColumnID];

            if (ColumnType == ColumnType.NameColumn)
            {
                if (col.MaxLength <= 0)
                {
                    return;
                }
                if (col.DataType != typeof(string))
                {
                    return;
                }
                if (di.DataType != OleDbType.WChar)
                {
                    return;
                }
                if (col.MaxLength != di.DataSize)
                {
                    DataTypeDiscrepancy discrepancy = new DataTypeDiscrepancy();
                    discrepancy.AnalysisServicesColumnType = ColumnType;
                    discrepancy.AnalysisServicesColumn     = di;
                    discrepancy.DimensionAttribute         = da;
                    discrepancy.DSVColumn = col;
                    listDiscrepancies.Add(discrepancy);
                }
            }
            else //KeyColumn
            {
                bool bDiscrepancy = false;
                if (Microsoft.AnalysisServices.OleDbTypeConverter.Convert(di.DataType) != col.DataType && Microsoft.AnalysisServices.OleDbTypeConverter.GetRestrictedOleDbType(col.DataType) != di.DataType)
                {
                    bDiscrepancy = true;
                }
                if (di.DataSize >= 0 && col.MaxLength >= 0 && di.DataSize != col.MaxLength)
                {
                    bDiscrepancy = true;
                }
                if (bDiscrepancy)
                {
                    DataTypeDiscrepancy discrepancy = new DataTypeDiscrepancy();
                    discrepancy.AnalysisServicesColumnType = ColumnType;
                    discrepancy.AnalysisServicesColumn     = di;
                    discrepancy.DimensionAttribute         = da;
                    discrepancy.DSVColumn = col;
                    listDiscrepancies.Add(discrepancy);
                }
            }
        }