Compartir a través de


DataColumn.DataType Propiedad

Definición

Obtiene o establece el tipo de datos almacenados en la columna.

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

Valor de propiedad

Objeto Type que representa el tipo de datos de la columna.

Atributos

Excepciones

La columna ya tiene datos almacenados.

Ejemplos

En el ejemplo siguiente se agregan columnas de varios tipos de datos a y DataTable, a continuación, se agrega una fila a la tabla.

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 DataType valor es muy importante para garantizar la creación y actualización correctas de datos en un origen de datos.

La DataType propiedad admite los siguientes tipos de datos base de .NET Framework:

así como el siguiente tipo de matriz:

  • Byte[]

Se genera una excepción al cambiar esta propiedad después de que la columna haya comenzado a almacenar datos.

Si AutoIncrement se establece true en antes de establecer la DataType propiedad e intenta establecer el tipo en cualquier cosa excepto un tipo entero, se genera una excepción.

Nota

Una columna de tipo Byte[] de datos requiere un tratamiento especial en determinados casos, ya que, a diferencia de los tipos de datos base de .NET Framework, es un tipo de datos de referencia. Si se usa una columna de tipo Byte[] de datos como PrimaryKey, o como una Sort clave o RowFilter para , DataViewcualquier cambio en el valor de columna debe implicar la asignación del Byte[] valor de columna a un objeto de instancia independiente Byte[] . 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. Esto se muestra en el ejemplo siguiente:

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 base de .NET Framework y Byte[], esta columna se tratará como un tipo definido por el usuario, sujeto a las siguientes restricciones de uso. (Para obtener más información sobre los tipos definidos por el usuario, vea Creación y uso de tipos User-Defined)

  • La columna no puede formar parte de una RowFilter expresión o Select .

  • Si la columna se usa como PrimaryKey, o como Sort o para , DataViewdebe tratarse como un campo inmutable; los datos de columna no se deben cambiar una vez que se haya agregado a la tabla.

  • Solo ColumnMapping se puede establecer en MappingType.Element.

  • La clase que implementa el tipo de datos de la columna debe marcarse con SerializableAttributey, si es necesario, implementar la ISerializable interfaz o IXmlSerializable .

  • La compatibilidad con el seguimiento de cambios es limitada. Para utilizar el mecanismo de seguimiento de cambios de la DataTable clase, la clase que implementa el tipo de datos de la columna debe implementar la IChangeTracking interfaz o asumir la responsabilidad de informar DataRow sobre cuándo se ha modificado el valor de columna, ya sea llamando SetModified a en la fila o asignando el objeto de valor de columna a un objeto de valor de columna creado por separado.

Se aplica a

Consulte también