DataColumn.DataType プロパティ

定義

列に格納されているデータの型を取得または設定します。Gets or sets the type of data stored in the column.

public:
 property Type ^ DataType { Type ^ get(); void set(Type ^ value); };
public Type DataType { get; set; }
[System.ComponentModel.TypeConverter(typeof(System.Data.ColumnTypeConverter))]
[System.Data.DataSysDescription("DataColumnDataTypeDescr")]
public Type DataType { get; set; }
[System.ComponentModel.TypeConverter(typeof(System.Data.ColumnTypeConverter))]
public Type DataType { get; set; }
member this.DataType : Type with get, set
Public Property DataType As Type

プロパティ値

列のデータ型を表す Type オブジェクト。A Type object that represents the column data type.

属性

例外

この列には既にデータが格納されています。The column already has data stored.

次の例では、複数のデータ型の列を DataTableに追加し、テーブルに1行追加します。The following example adds columns of several data types to a DataTable, and then adds one row to the table.

public DataTable MakeDataTable(){
    
    DataTable myTable;
    DataRow myNewRow; 
    // Create a new DataTable.
    myTable = new DataTable("My Table");

    // Create DataColumn objects of data types.
    DataColumn colString = new DataColumn("StringCol");
    colString.DataType = System.Type.GetType("System.String");
    myTable.Columns.Add(colString); 
 
    DataColumn colInt32 = new DataColumn("Int32Col");
    colInt32.DataType = System.Type.GetType("System.Int32");
    myTable.Columns.Add(colInt32);

    DataColumn colBoolean = new DataColumn("BooleanCol");
    colBoolean.DataType = System.Type.GetType("System.Boolean");
    myTable.Columns.Add(colBoolean);

    DataColumn colTimeSpan = new DataColumn("TimeSpanCol");
    colTimeSpan.DataType = System.Type.GetType("System.TimeSpan");
    myTable.Columns.Add(colTimeSpan);

    DataColumn colDateTime = new DataColumn("DateTimeCol");
    colDateTime.DataType = System.Type.GetType("System.DateTime");
    myTable.Columns.Add(colDateTime);

    DataColumn colDecimal = new DataColumn("DecimalCol");
    colDecimal.DataType = System.Type.GetType("System.Decimal");
    myTable.Columns.Add(colDecimal);

    DataColumn colByteArray = new DataColumn("ByteArrayCol");
    colByteArray.DataType = System.Type.GetType("System.Byte[]");
    myTable.Columns.Add(colByteArray);

    // Populate one row with values.
    myNewRow = myTable.NewRow();

    myNewRow["StringCol"] = "Item Name";
    myNewRow["Int32Col"] = 2147483647;
    myNewRow["BooleanCol"] = true;
    myNewRow["TimeSpanCol"] = new TimeSpan(10,22,10,15,100);
    myNewRow["DateTimeCol"] = System.DateTime.Today;
    myNewRow["DecimalCol"] = 64.0021;
    myNewRow["ByteArrayCol"] = new Byte[] { 1, 5, 120 };
    myTable.Rows.Add(myNewRow);
    return myTable;  
 }
Public Function MakeDataTable() As DataTable
    
    Dim myTable As DataTable 
    Dim myNewRow As DataRow 
    ' Create a new DataTable.
    myTable = New DataTable("My Table")
 
    ' Create DataColumn objects of data types.
    Dim colString As New DataColumn("StringCol")
    colString.DataType = System.Type.GetType("System.String")
    myTable.Columns.Add(colString) 
 
    Dim colInt32 As New DataColumn("Int32Col")
    colInt32.DataType = System.Type.GetType("System.Int32")
    myTable.Columns.Add(colInt32)
 
    Dim colBoolean As New DataColumn("BooleanCol")
    colBoolean.DataType = System.Type.GetType("System.Boolean")
    myTable.Columns.Add(colBoolean)
 
    Dim colTimeSpan As New DataColumn("TimeSpanCol")
    colTimeSpan.DataType = System.Type.GetType("System.TimeSpan")
    myTable.Columns.Add(colTimeSpan)
 
    Dim colDateTime As New DataColumn("DateTimeCol")
    colDateTime.DataType = System.Type.GetType("System.DateTime")
    myTable.Columns.Add(colDateTime)
 
    Dim colDecimal As New DataColumn("DecimalCol")
    colDecimal.DataType = System.Type.GetType("System.Decimal")
    myTable.Columns.Add(colDecimal)
 
    ' Populate one row with values.
    myNewRow = myTable.NewRow()
 
    myNewRow("StringCol") = "Item Name"
    myNewRow("Int32Col") = 2147483647
    myNewRow("BooleanCol") = True
    myNewRow("TimeSpanCol") = New TimeSpan(10,22,10,15,100)
    myNewRow("DateTimeCol") = System.DateTime.Today
    myNewRow("DecimalCol") = 64.0021
    myNewRow("ByteArrayCol") = New [Byte]() {1, 5, 120}
    myTable.Rows.Add(myNewRow)
    MakeDataTable = myTable  
 End Function

注釈

DataType 値を設定することは、データソース内のデータの作成と更新を適切に行うために非常に重要です。Setting the DataType value is very important to guaranteeing the correct creation and updating of data in a data source.

DataType プロパティは、次の基本 .NET Framework データ型をサポートしています。The DataType property supports the following base .NET Framework data types:

また、次の配列型も同様です。as well as the following array type:

  • Byte[]

列でデータの格納が開始された後にこのプロパティを変更すると、例外が生成されます。An exception is generated when changing this property after the column has begun storing data.

DataType プロパティを設定する前に AutoIncrementtrue に設定されていて、整数型以外の任意の型に設定しようとすると、例外が生成されます。If AutoIncrement is set to true before setting the DataType property, and you try to set the type to anything except an integer type, an exception is generated.

注意

データ型 Byte[] の列では、基本 .NET Framework データ型とは異なり、参照データ型であるため、特別な処理が必要になります。A column of data type Byte[] requires special treatment in certain cases since, unlike the base .NET Framework data types, it is a reference data type. Byte[] データ型の列が PrimaryKeyとして使用されている場合、または DataViewSort または RowFilter キーとして使用される場合、列の値を変更するには、個別にインスタンス化された Byte[] オブジェクトに Byte[] 列の値を割り当てる必要があります。If a column of data type Byte[] is used as a PrimaryKey, or as a Sort or RowFilter key for a DataView, any change to the column value must involve assigning the Byte[] column value to a separately instantiated Byte[] object. この割り当ては、並べ替え、フィルター処理、および主キー操作によって使用される内部インデックスの更新をトリガーするために必要です。This assignment is required to trigger the update of the internal indexes used by sorting, filtering, and primary key operations. この例を次に示します。This is illustrated by the following example:

byte[] columnValue = (byte[])myDataTable.Rows[0][0];  
byte[] newValue = (byte[])columnValue.Clone();  
newValue[1] = 2;  
myDataTable.Rows[0][0] = newValue;  

注意

列を基本 .NET Framework データ型および Byte[]以外のデータ型として定義することもできますが、このような列は、次の使用制限に従って、ユーザー定義型として扱われます。Although it is possible to define a column as data type other than the base .NET Framework data types and Byte[], such a column will be treated as a user-defined type, subject to the following usage restrictions. (ユーザー定義型の詳細については、「ユーザー定義型の作成と使用」を参照してください)。(For more information on user-defined types, see Creating and Using User-Defined Types.)

  • 列を RowFilter または Select 式の一部にすることはできません。The column cannot be part of a RowFilter or Select expression.

  • 列が PrimaryKeyとして、または Sort または DataViewとして使用されている場合は、変更できないフィールドとして処理する必要があります。列データは、テーブルに追加された後に変更することはできません。If the column is used as a PrimaryKey, or as a Sort or for a DataView, it must be treated as an immutable field; the column data must not be changed once it has been added to the table.

  • この ColumnMapping は、MappingType.Elementにのみ設定できます。Its ColumnMapping can be only set to MappingType.Element.

  • 列のデータ型を実装するクラスは、SerializableAttributeでマークする必要があり、必要に応じて ISerializable または IXmlSerializable インターフェイスを実装する必要があります。The class that implements the column's data type must be must be marked with the SerializableAttribute, and if necessary implement the ISerializable or IXmlSerializable interface.

  • 変更の追跡のサポートは限られています。Support for change tracking is limited. DataTable クラスの変更追跡メカニズムを利用するには、列のデータ型を実装するクラスで IChangeTracking インターフェイスを実装するか、列の値が変更されたときに DataRow に通知する責任を受ける必要があります。そのためには、行で SetModified を呼び出すか、列の値オブジェクトを個別にインスタンス化した列値オブジェクトに割り当てますTo utilize the DataTable class' change tracking mechanism, the class that implements the column's data type must either implement the IChangeTracking interface, or take over the responsibility for informing the DataRow when the column value has been modified, either by calling SetModified on the row or by assigning the column value object to a separately instantiated column value object.

適用対象

こちらもご覧ください