DataTable への列の追加Adding Columns to a DataTable

DataTableは、テーブルのDataColumn Columnsプロパティによって参照されるオブジェクトのコレクションが含まれています。A DataTable contains a collection of DataColumn objects referenced by the Columns property of the table. この列のコレクションと制約によって、テーブルのスキーマ (構造) が定義されます。This collection of columns, along with any constraints, defines the schema, or structure, of the table.

テーブル内にdatacolumnオブジェクトを作成するには、 datacolumnコンストラクターを使用するか、テーブルDataColumnCollectionColumnsプロパティのAddメソッド () を呼び出します。You create DataColumn objects within a table by using the DataColumn constructor, or by calling the Add method of the Columns property of the table, which is a DataColumnCollection. Addメソッドは、オプションのColumnNameDataType、およびExpression引数を受け取り、コレクションのメンバーとして新しいDataColumnを作成します。The Add method accepts optional ColumnName, DataType, and Expression arguments and creates a new DataColumn as a member of the collection. また、既存のdatacolumnオブジェクトを受け取り、それをコレクションに追加し、要求された場合は追加されたdatacolumnへの参照を返します。It also accepts an existing DataColumn object and adds it to the collection, and returns a reference to the added DataColumn if requested. DataTableオブジェクトはどのデータソースにも固有ではないため、 DataColumnのデータ型を指定するときに .NET Framework 型が使用されます。Because DataTable objects are not specific to any data source, .NET Framework types are used when specifying the data type of a DataColumn.

次の例では、 DataTableに4つの列を追加します。The following example adds four columns to a 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));  

この例では、 CustID列のプロパティがDBNull値を許可しないように設定されていて、値が一意になるように制約されていることに注意してください。In the example, notice that the properties for the CustID column are set to not allow DBNull values and to constrain values to be unique. ただし、 CustID列をテーブルの主キー列として定義すると、 allowdbnullプロパティが自動的にfalseに設定され、 Uniqueプロパティが自動的にtrueに設定されます。However, if you define the CustID column as the primary key column of the table, the AllowDBNull property will automatically be set to false and the Unique property will automatically be set to true. 詳細については、「主キーの定義」を参照してください。For more information, see Defining Primary Keys.

注意事項

列名が列に指定されていない場合、列には、 DataColumnCollectionに追加されると、"Column1" で始まる列Nの増分既定名が指定されます。If a column name is not supplied for a column, the column is given an incremental default name of ColumnN, starting with "Column1", when it is added to the DataColumnCollection. 列名を指定するときは、"ColumnN" の命名規則を使用しないことをお勧めします。これは、指定した名前がDataColumnCollection内の既存の既定の列名と競合する可能性があるためです。We recommend that you avoid the naming convention of "ColumnN" when you supply a column name, because the name you supply may conflict with an existing default column name in the DataColumnCollection. 指定した名前が既に存在する場合は、例外がスローされます。If the supplied name already exists, an exception is thrown.

XElement を、DataType 内の DataColumnDataTable として使用すると、データを読み取るときに XML シリアル化が機能しません。If you are using XElement as the DataType of a DataColumn in the DataTable, XML serialization will not work when you read in data. たとえば、XmlDocument メソッドを使用して DataTable.WriteXml を書き込むと、XML へのシリアル化で XElement に親ノードが追加されます。For example, if you write out a XmlDocument by using the DataTable.WriteXml method, upon serialization to XML there is an additional parent node in the XElement. この問題に対処するには、SqlXml の代わりに XElement 型を使用します。To work around this problem, use the SqlXml type instead of XElement. ReadXml および WriteXml は、SqlXml で適切に機能します。ReadXml and WriteXml work correctly with SqlXml.

関連項目See also