/* * 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); } } }
/* * 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); } } }