DataColumn.DataType Propiedad

Definición

Obtiene o establece el tipo de datos almacenado en la columna.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))]
[System.Data.DataSysDescription("DataColumnDataTypeDescr")]
public Type DataType { get; set; }
member this.DataType : Type with get, set
Public Property DataType As Type

Valor de propiedad

Objeto Type que representa el tipo de datos de la columna.A Type object that represents the column data type.

Atributos

Excepciones

La columna ya tiene datos almacenados.The column already has data stored.

Ejemplos

En el ejemplo siguiente se agregan columnas de varios tipos de datos a un DataTabley, a continuación, se agrega una fila a la tabla.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

Comentarios

Establecer el valor DataType es muy importante para garantizar la creación y actualización correctas de los datos en un origen de datos.Setting the DataType value is very important to guaranteeing the correct creation and updating of data in a data source.

La propiedad DataType admite los siguientes tipos de datos base .NET Framework:The DataType property supports the following base .NET Framework data types:

así como el tipo de matriz siguiente:as well as the following array type:

  • Byte[]

Se genera una excepción al cambiar esta propiedad después de que la columna haya empezado a almacenar datos.An exception is generated when changing this property after the column has begun storing data.

Si AutoIncrement se establece en true antes de establecer la propiedad DataType e intenta establecer el tipo en cualquier cosa excepto en un tipo entero, se genera una excepción.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.

Nota

Una columna de tipo de datos Byte[] requiere un tratamiento especial en ciertos casos, ya que, a diferencia de los tipos de datos base .NET Framework, es un tipo de datos de referencia.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. Si se utiliza una columna de tipo de datos Byte[] como PrimaryKey, o como una clave Sort o RowFilter para un DataView, cualquier cambio en el valor de la columna debe implicar la asignación del valor de la columna Byte[] a un objeto Byte[] con instancias independientes.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. Esta asignación es necesaria para desencadenar la actualización de los índices internos utilizados por las operaciones de ordenación, filtrado y clave principal.This assignment is required to trigger the update of the internal indexes used by sorting, filtering, and primary key operations. Esto se muestra en el ejemplo siguiente: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;  

Nota

Aunque es posible definir una columna como tipo de datos distinto de los tipos de datos .NET Framework base y Byte[], dicha columna se tratará como un tipo definido por el usuario, sujeto a las siguientes restricciones de uso.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. (Para obtener más información sobre los tipos definidos por el usuario, vea crear y usar tipos definidos por el usuario).(For more information on user-defined types, see Creating and Using User-Defined Types.)

  • La columna no puede formar parte de una expresión RowFilter o Select.The column cannot be part of a RowFilter or Select expression.

  • Si la columna se usa como PrimaryKey, o como un Sort o para un DataView, debe tratarse como un campo inmutable; los datos de la columna no deben cambiarse una vez que se han agregado a la tabla.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.

  • Su ColumnMapping solo se puede establecer en MappingType.Element.Its ColumnMapping can be only set to MappingType.Element.

  • La clase que implementa el tipo de datos de la columna debe estar marcada con el SerializableAttributey, si es necesario, implementar la interfaz ISerializable o 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.

  • La compatibilidad con el seguimiento de cambios es limitada.Support for change tracking is limited. Para utilizar el mecanismo de seguimiento de cambios de la clase DataTable, la clase que implementa el tipo de datos de la columna debe implementar la interfaz IChangeTracking o asumir la responsabilidad de informar al DataRow cuando se ha modificado el valor de la columna, ya sea mediante una llamada a SetModified en la fila o mediante la asignación del objeto de valor de columna a un objeto de valor de columna de instancia separada.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.

Se aplica a

Consulte también: