private void BaseAdd(DataColumn column)
{
if (column == null)
{
throw ExceptionBuilder.ArgumentNull(nameof(column));
}
if (column._table == _table)
{
throw ExceptionBuilder.CannotAddColumn1(column.ColumnName);
}
if (column._table != null)
{
throw ExceptionBuilder.CannotAddColumn2(column.ColumnName);
}
if (column.ColumnName.Length == 0)
{
column.ColumnName = AssignName();
}
RegisterColumnName(column.ColumnName, column);
try
{
column.SetTable(_table);
if (!_table.fInitInProgress && column.Computed)
{
if (column.DataExpression.DependsOn(column))
{
throw ExceptionBuilder.ExpressionCircular();
}
}
if (0 < _table.RecordCapacity)
{
// adding a column to table with existing rows
column.SetCapacity(_table.RecordCapacity);
}
// fill column with default value.
for (int record = 0; record < _table.RecordCapacity; record++)
{
column.InitializeRecord(record);
}
if (_table.DataSet != null)
{
column.OnSetDataSet();
}
}
catch (Exception e) when (ADP.IsCatchableOrSecurityExceptionType(e))
{
UnregisterName(column.ColumnName);
throw;
}
}