Adicionando colunas a um DataTable
Um DataTable contém uma coleção de objetos DataColumn referenciados pela propriedade Columns da tabela. Esta coleção de colunas, junto com quaisquer restrições, define o esquema, ou a estrutura, da tabela.
Você cria objetos DataColumn em uma tabela usando o construtor DataColumn ou chamando o método Add da propriedade Columns a tabela, que é um DataColumnCollection. O método Add aceita argumentos opcionais ColumnName, DataType e Expression e cria um novo DataColumn como membro da coleção. Também aceita um objeto DataColumn existente, adiciona-o à coleção e retorna uma referência ao DataColumn adicionado, se solicitado. Como os objetos DataTable não são específicos de nenhuma fonte de dados, os tipos .NET Framework são usados ao especificar o tipo de dados de um DataColumn.
O exemplo a seguir adiciona quatro colunas a um DataTable.
Dim workTable As DataTable = New DataTable("Customers")
Dim workCol As DataColumn = workTable.Columns.Add( _
"CustID", Type.GetType("System.Int32"))
workCol.AllowDBNull = false
workCol.Unique = true
workTable.Columns.Add("CustLName", Type.GetType("System.String"))
workTable.Columns.Add("CustFName", Type.GetType("System.String"))
workTable.Columns.Add("Purchases", Type.GetType("System.Double"))
DataTable workTable = new DataTable("Customers");
DataColumn workCol = workTable.Columns.Add("CustID", typeof(Int32));
workCol.AllowDBNull = false;
workCol.Unique = true;
workTable.Columns.Add("CustLName", typeof(String));
workTable.Columns.Add("CustFName", typeof(String));
workTable.Columns.Add("Purchases", typeof(Double));
No exemplo, observe que as propriedades da coluna CustID são definidas para não permitir valores DBNull e para restringir os valores que serão exclusivos. No entanto, se você definir a coluna CustID como a coluna de chave primária da tabela, a propriedade AllowDBNull será automaticamente definida como false e a propriedade Unique será automaticamente definida como true. Para obter mais informações, consulte Definir chaves primárias.
Cuidado
Se um nome de coluna não for fornecido para uma coluna, a coluna receberá um nome padrão incremental de ColumnN, começando com "Column1", quando for adicionada ao DataColumnCollection. É recomendável evitar a convenção de nomenclatura "ColumnN" ao fornecer um nome de coluna porque o nome fornecido poderá entrar em conflito com um nome de coluna padrão existente no DataColumnCollection. Se o nome fornecido já existir, será gerada uma exceção.
Se você estiver usando XElement como DataType de um DataColumn no DataTable, a serialização XML não funcionará quando você ler dados. Por exemplo, se você escreve um XmlDocument usando o método DataTable.WriteXml
, na serialização para XML há um nó pai adicional no XElement. Para resolver esse problema, use o tipo SqlXml em vez de XElement. ReadXml
e WriteXml
funcionam corretamente com SqlXml.