Udostępnij za pośrednictwem


DataColumn.DataType Właściwość

Definicja

Pobiera lub ustawia typ danych przechowywanych w kolumnie.

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

Wartość właściwości

Type Obiekt reprezentujący typ danych kolumny.

Atrybuty

Wyjątki

Kolumna zawiera już przechowywane dane.

Przykłady

Poniższy przykład dodaje kolumny kilku typów danych do DataTabletabeli , a następnie dodaje jeden wiersz do tabeli.

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

Uwagi

DataType Ustawienie wartości jest bardzo ważne, aby zagwarantować prawidłowe tworzenie i aktualizowanie danych w źródle danych.

Właściwość DataType obsługuje następujące podstawowe typy danych .NET Framework:

a także następujący typ tablicy:

  • Byte[]

Podczas zmiany tej właściwości po rozpoczęciu przechowywania danych w kolumnie jest generowany wyjątek.

Jeśli AutoIncrement parametr jest ustawiony na true wartość przed ustawieniem DataType właściwości i spróbujesz ustawić typ na dowolny typ z wyjątkiem typu liczby całkowitej, generowany jest wyjątek.

Uwaga

Kolumna typu Byte[] danych wymaga specjalnego traktowania w niektórych przypadkach, ponieważ, w przeciwieństwie do podstawowych .NET Framework typów danych, jest to typ danych referencyjnych. Jeśli kolumna typu Byte[] danych jest używana jako PrimaryKey, lub jako Sort klucz lub RowFilter dla DataViewelementu , każda zmiana wartości kolumny musi obejmować przypisanie Byte[] wartości kolumny do oddzielnie utworzonego Byte[] obiektu. To przypisanie jest wymagane do wyzwolenia aktualizacji indeksów wewnętrznych używanych przez operacje sortowania, filtrowania i klucza podstawowego. Jest to zilustrowane w poniższym przykładzie:

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

Uwaga

Chociaż istnieje możliwość zdefiniowania kolumny jako typu danych innego niż podstawowe typy danych .NET Framework i Byte[], taka kolumna będzie traktowana jako typ zdefiniowany przez użytkownika, z zastrzeżeniem następujących ograniczeń użycia. (Aby uzyskać więcej informacji na temat typów zdefiniowanych przez użytkownika, zobacz Tworzenie i używanie typów User-Defined)

  • Kolumna nie może być częścią RowFilter wyrażenia lub Select .

  • Jeśli kolumna jest używana jako PrimaryKey, lub jako Sort lub , DataViewmusi być traktowana jako pole niezmienne; dane kolumny nie mogą być zmieniane po dodaniu jej do tabeli.

  • Można go ColumnMapping ustawić tylko na MappingType.Elementwartość .

  • Klasa, która implementuje typ danych kolumny, musi być oznaczona za SerializableAttributepomocą elementu , a w razie potrzeby zaimplementować ISerializable interfejs lub IXmlSerializable .

  • Obsługa śledzenia zmian jest ograniczona. Aby korzystać z DataTable mechanizmu śledzenia zmian klasy, klasa, która implementuje typ danych kolumny, musi zaimplementować IChangeTracking interfejs lub przejąć odpowiedzialność za informowanie o zmodyfikowaniu DataRow wartości kolumny przez wywołanie SetModified wiersza lub przypisanie obiektu wartości kolumny do oddzielnie utworzonego obiektu wartości kolumny.

Dotyczy

Zobacz też