using System; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Text; namespace Dfs.WayneChina.SpsDbManager { internal class DataRowDbColumn : DbColumn { #region Fields private readonly DataColumnCollection schemaColumns; private readonly DataRow schemaRow; #endregion #region Constructors and Destructors public DataRowDbColumn(DataRow readerSchemaRow, DataColumnCollection readerSchemaColumns) { this.schemaRow = readerSchemaRow; this.schemaColumns = readerSchemaColumns; this.PopulateFields(); } #endregion #region Methods private T GetDbColumnValue(string columnName) { if (!this.schemaColumns.Contains(columnName)) { return default(T); } object schemaObject = this.schemaRow[columnName]; if (schemaObject is T variable) { return variable; } return default(T); } /// /// private void PopulateFields() { this.AllowDBNull = this.GetDbColumnValue(SchemaTableColumn.AllowDBNull); this.BaseCatalogName = this.GetDbColumnValue(SchemaTableOptionalColumn.BaseCatalogName); this.BaseColumnName = this.GetDbColumnValue(SchemaTableColumn.BaseColumnName); this.BaseSchemaName = this.GetDbColumnValue(SchemaTableColumn.BaseSchemaName); this.BaseServerName = this.GetDbColumnValue(SchemaTableOptionalColumn.BaseServerName); this.BaseTableName = this.GetDbColumnValue(SchemaTableColumn.BaseTableName); this.ColumnName = this.GetDbColumnValue(SchemaTableColumn.ColumnName); this.ColumnOrdinal = this.GetDbColumnValue(SchemaTableColumn.ColumnOrdinal); this.ColumnSize = this.GetDbColumnValue(SchemaTableColumn.ColumnSize); this.IsAliased = this.GetDbColumnValue(SchemaTableColumn.IsAliased); this.IsAutoIncrement = this.GetDbColumnValue(SchemaTableOptionalColumn.IsAutoIncrement); this.IsExpression = this.GetDbColumnValue(SchemaTableColumn.IsExpression); this.IsHidden = this.GetDbColumnValue(SchemaTableOptionalColumn.IsHidden); this.IsIdentity = this.GetDbColumnValue("IsIdentity"); this.IsKey = this.GetDbColumnValue(SchemaTableColumn.IsKey); this.IsLong = this.GetDbColumnValue(SchemaTableColumn.IsLong); this.IsReadOnly = this.GetDbColumnValue(SchemaTableOptionalColumn.IsReadOnly); this.IsUnique = this.GetDbColumnValue(SchemaTableColumn.IsUnique); this.NumericPrecision = this.GetDbColumnValue(SchemaTableColumn.NumericPrecision); this.NumericScale = this.GetDbColumnValue(SchemaTableColumn.NumericScale); this.UdtAssemblyQualifiedName = this.GetDbColumnValue("UdtAssemblyQualifiedName"); this.DataType = this.GetDbColumnValue(SchemaTableColumn.DataType); this.DataTypeName = this.GetDbColumnValue("DataTypeName"); } #endregion } }