System.Data.DataTableReader.GetSchemaTable C# (CSharp) Method

GetSchemaTable() public method

public GetSchemaTable ( ) : DataTable
return DataTable
        public override DataTable GetSchemaTable()
        {
            ValidateOpen(nameof(GetSchemaTable));
            ValidateReader();

            // each time, we just get schema table of current table for once, no need to recreate each time, if schema is changed, reader is already
            // is invalid
            if (_schemaTable == null)
            {
                _schemaTable = GetSchemaTableFromDataTable(_currentDataTable);
            }

            return _schemaTable;
        }

Usage Example

        /// <summary>
        /// Read columns schema from database
        /// </summary>
        private List<DbColumn> ReadColumns(String tableName, string ownerName)
        {
            List<DbColumn> result = new List<DbColumn>();

            using (SqlDataAdapter adapter = new SqlDataAdapter(String.Format("SELECT TOP 1 * FROM [{0}].[{1}]", ownerName, tableName), (SqlConnection)_dbConnection))
            {
                adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;

                DataTable columnsSchema;

                // Jjust to avoid stupid "Failed to enable constraints" error!
                using (DataSet tempDs = new DataSet())
                {
                    // Avoiding stupid "Failed to enable constraints" error!
                    tempDs.EnforceConstraints = false;

                    using (DataTable columnsList = new DataTable())
                    {
                        tempDs.Tables.Add(columnsList);

                        // Get from db
                        adapter.Fill(columnsList);

                        // Get schema
                        using (DataTableReader reader = new DataTableReader(columnsList))
                            columnsSchema = reader.GetSchemaTable();
                    }
                }

                // Used to get columns Sql DataType
                using (DataTable columnsDbTypeTable = _dbConnection.GetSchema("COLUMNS"))
                {

                    // Fetch the rows
                    foreach (DataRow dr in columnsSchema.Rows)
                    {
                        string columnName = dr["ColumnName"].ToString();
                        DbColumn column = new DbColumn(columnName)
                        {
                            DataTypeDotNet = dr["DataType"].ToString(),
                            Length = Convert.ToInt32(dr["ColumnSize"]),
                            PrimaryKey = Convert.ToBoolean(dr["IsKey"]),
                            AutoIncrement = Convert.ToBoolean(dr["IsAutoIncrement"]),
                            AllowNull = Convert.ToBoolean(dr["AllowDBNull"]),
                            ColumnOrdinal = Convert.ToInt32(dr["ColumnOrdinal"]),
                        };
                        column.FieldNameSchema = DbSchemaNames.FieldName_RemoveInvalidChars(column.FieldNameSchema);

                        // Columns which needs additional fetch
                        var succeed = FillColumnAdditionalInfo(column, columnsDbTypeTable, tableName, columnName);

                        // if additional info readin is failed, don't add it to the list
                        if (succeed)
                        {
                            // Add to result
                            result.Add(column);
                        }
                        else
                        {
                            // TODO: inform the user
                        }
                    }
                }
            }
            return result;
        }
All Usage Examples Of System.Data.DataTableReader::GetSchemaTable