DataColumn.DataType Свойство

Определение

Возвращает или задает тип данных, хранимых в столбце.Gets or sets the type of data stored in the column.

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

Значение свойства

Type

Объект Type, представляющий тип данных столбца.A Type object that represents the column data type.

Атрибуты

Исключения

В столбце уже содержатся данные.The column already has data stored.

Примеры

В следующем примере столбцы с несколькими типами данных добавляются в DataTable , а затем в таблицу добавляется одна строка.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.

Если AutoIncrement для параметра задано значение true перед установкой DataType свойства, то при попытке установить тип на что-либо, кроме целочисленного типа, создается исключение.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 качестве Sort RowFilter ключа или для DataView , любое изменение значения столбца должно предусматривать присвоение 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. (Дополнительные сведения об определяемых пользователем типах см. в разделе Создание и использование типов User-Defined).(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.

Применяется к

См. также раздел