Sdílet prostřednictvím


DataColumn.DataType Vlastnost

Definice

Získá nebo nastaví typ dat uložených ve sloupci.

public:
 property Type ^ DataType { Type ^ get(); void set(Type ^ value); };
[System.ComponentModel.TypeConverter(typeof(System.Data.ColumnTypeConverter))]
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public Type DataType { get; set; }
[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))>]
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.DataType : Type with 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

Hodnota vlastnosti

Objekt Type , který představuje datový typ sloupce.

Atributy

Výjimky

Sloupec již obsahuje uložená data.

Příklady

Následující příklad přidá do tabulky DataTablesloupce několika datových typů a pak do tabulky přidá jeden řádek.

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

Poznámky

DataType Nastavení hodnoty je velmi důležité pro zajištění správného vytváření a aktualizace dat ve zdroji dat.

Tato DataType vlastnost podporuje následující základní datové typy rozhraní .NET Framework:

a také následující typ pole:

  • Byte[]

Při změně této vlastnosti se po zahájení ukládání dat ve sloupci vygeneruje výjimka.

Pokud AutoIncrement je nastavena na true před nastavením DataType vlastnosti a pokusíte se nastavit typ na cokoli kromě celočíselného typu, vygeneruje se výjimka.

Poznámka:

Sloupec datového typu Byte[] vyžaduje zvláštní zacházení v určitých případech, protože na rozdíl od základních datových typů rozhraní .NET Framework se jedná o referenční datový typ. Pokud se sloupec datového typu Byte[] používá jako PrimaryKeysloupec nebo jako SortRowFilter klíč pro DataViewhodnotu sloupce, musí jakákoli změna hodnoty sloupce zahrnovat přiřazení Byte[] hodnoty sloupce k samostatnému vytvoření instance Byte[] objektu. Toto přiřazení se vyžaduje k aktivaci aktualizace interních indexů používaných operacemi řazení, filtrování a primárního klíče. To je znázorněno v následujícím příkladu:

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

Poznámka:

I když je možné definovat sloupec jako jiný datový typ než základní datové typy rozhraní .NET Framework a Byte[], takový sloupec bude považován za uživatelem definovaný typ, s výhradou následujících omezení použití. (Další informace o uživatelem definovaných typech najdete v tématu Vytváření a používání typů User-Defined)

  • Sloupec nemůže být součástí RowFilter ani Select výrazu.

  • Pokud se sloupec používá jako PrimaryKeynebo jako Sort sloupec nebo pro něj DataView, musí být považován za neměnné pole. Data sloupce se nesmí po přidání do tabulky změnit.

  • Jeho ColumnMapping lze nastavit pouze na MappingType.Element.

  • Třída, která implementuje datový typ sloupce, musí být označena pomocí SerializableAttribute, a v případě potřeby implementovat ISerializable nebo IXmlSerializable rozhraní.

  • Podpora sledování změn je omezená. Aby bylo možné využít DataTable mechanismus sledování změn třídy, třída, která implementuje datový typ sloupce, musí buď implementovat IChangeTracking rozhraní, nebo převzít odpovědnost za informování DataRow o tom, kdy byla hodnota sloupce změněna, buď voláním SetModified na řádek nebo přiřazením objektu hodnoty sloupce k objektu hodnoty samostatné instance.

Platí pro

Viz také