DataTable への列の追加

DataTable には、テーブルの Columns プロパティによって参照される DataColumn オブジェクトのコレクションが格納されます。 この列のコレクションと制約によって、テーブルのスキーマ (構造) が定義されます。

テーブル内に DataColumn オブジェクトを作成するには、DataColumn コンストラクターを使用するか、または DataColumnCollection であるテーブルの Columns プロパティの Add メソッドを呼び出します。 Add メソッドは、オプションの ColumnNameDataTypeExpression の各引数を受け取り、新しい DataColumn をコレクションのメンバーとして作成します。 また、このメソッドは既存の DataColumn オブジェクトを受け取り、それをコレクションに追加して、要求された場合は、追加された DataColumn への参照を返します。 DataTable オブジェクトはデータ ソースに固有ではないため、DataColumn のデータ型を指定するときには、.NET Framework 型が使用されます。

DataTable に 4 つの列を追加する例を次に示します。

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));  

この例では、DBNull 値を許可せずに値を一意の値に制約するように、CustID 列のプロパティが設定されていることに注意してください。 ただし、CustID 列をテーブルの主キー列として定義した場合、AllowDBNull プロパティは自動的に false に設定され、Unique プロパティは自動的に true に設定されます。 詳しくは、「主キーの定義」をご覧ください。

注意事項

列名が指定されていない列を DataColumnCollection に追加する場合、この列には "Column1" から始まって増分される既定名 ColumnN が割り当てられます。 列名を指定するときには、"ColumnN" の命名規則を使用しないことをお勧めします。これは、指定した名前が DataColumnCollection に既に存在する既定の列名と競合しないようにするためです。 指定した名前が既に存在する場合は、例外がスローされます。

XElement を、DataType 内の DataColumnDataTable として使用すると、データを読み取るときに XML シリアル化が機能しません。 たとえば、XmlDocument メソッドを使用して DataTable.WriteXml を書き込むと、XML へのシリアル化で XElement に親ノードが追加されます。 この問題に対処するには、SqlXml の代わりに XElement 型を使用します。 ReadXml および WriteXml は、SqlXml で適切に機能します。

関連項目