DataTableには、テーブルの DataColumn プロパティによって参照されるオブジェクトのコレクションが含まれています。 この列のコレクションと制約により、テーブルのスキーマまたは構造が定義されます。
DataColumn コンストラクターを使用するか、テーブルの Columns プロパティ () の Add メソッドを呼び出して、テーブル内に DataColumnCollection オブジェクトを作成します。 Add メソッドは、省略可能な ColumnName、DataType、および Expression 引数を受け取り、コレクションのメンバーとして新しい 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));
この例では、 CustID 列のプロパティが 、DBNull 値を許可せず、値を一意に制限するように設定されていることに注意してください。 ただし、テーブルの主キー列として CustID 列を定義すると、 AllowDBNull プロパティは自動的に false に設定され、 Unique プロパティは自動的に true に設定されます。 詳しくは、「主キーの定義」をご覧ください。
注意事項
列に列名が指定されていない場合、列が DataColumnCollection に追加されるときに、"Column1" で始まる列N の増分既定の名前が指定されます。 指定した名前は DataColumnCollection の既存の既定の列名と競合する可能性があるため、列名を指定する場合は"列N" の名前付け規則を使用しないことをお勧めします。 指定された名前が既に存在する場合は、例外がスローされます。
XElementをDataTypeのDataColumnのDataTableとして使用している場合、データを読み取るときに XML シリアル化は機能しません。 たとえば、XmlDocument メソッドを使用してDataTable.WriteXml
を書き込む場合、XML へのシリアル化時に、XElementに追加の親ノードがあります。 この問題を回避するには、SqlXmlの代わりにXElement型を使用します。
ReadXml
とWriteXml
SqlXmlで正しく動作します。