/// <devdoc>
/// Does verification on the column and it's name, and points the column at the dataSet that owns this collection.
/// An ArgumentNullException is thrown if this column is null. An ArgumentException is thrown if this column
/// already belongs to this collection, belongs to another collection.
/// A DuplicateNameException is thrown if this collection already has a column with the same
/// name (case insensitive).
/// </devdoc>
private void BaseAdd(DataColumn column)
{
if (column == null)
{
throw ExceptionBuilder.ArgumentNull("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) {
//
if (ADP.IsCatchableOrSecurityExceptionType(e))
{
UnregisterName(column.ColumnName);
}
throw;
}
}