DataColumn.DataType 屬性

定義

取得或設定儲存在資料行中的資料型別。

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 物件,表示資料行資料型別。

屬性

例外狀況

資料行已經具有儲存的資料。

範例

下列範例會將數個 DataTable數據類型的數據行加入 至 ,然後將一個數據列加入數據表。

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設定值對於保證數據源中數據的正確建立和更新非常重要。

屬性DataType支援下列基底 .NET Framework 資料類型:

以及下列數位型態:

  • Byte[]

在數據行開始儲存數據之後變更此屬性時,會產生例外狀況。

如果在AutoIncrement設定 DataType 屬性之前設定為 true ,而且您嘗試將類型設定為整數類型以外的任何專案,就會產生例外狀況。

注意

數據類型Byte[]的數據行在某些情況下需要特殊處理,因為不同於基底 .NET Framework 數據類型,它是參考數據類型。 如果數據類型Byte[]的數據行做為PrimaryKey, 或 作為 SortDataViewRowFilter 索引鍵,任何數據行值的變更都必須牽涉到將數據行值指派Byte[]給個別具現化Byte[]的物件。 需要此指派,才能觸發排序、篩選和主鍵作業所使用的內部索引更新。 以下範例就是說明這種情況:

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

注意

雖然可以將數據行定義為基底 .NET Framework 數據類型以外的數據類型和 Byte[],但這類數據行會被視為使用者定義型別,但受限於下列使用限制。 (如需使用者定義類型的詳細資訊,請參閱建立和使用 User-Defined 類型)

  • 數據行不能是 或 Select 表達式的一RowFilter部分。

  • 如果數據行做為 PrimaryKey、或 Sort 做為 或 DataView,則必須將它視為不可變的欄位;數據行數據一旦加入數據表之後就不能變更。

  • ColumnMapping 設定為 MappingType.Element

  • 實作數據行數據類型的類別必須標示為 SerializableAttribute,並視需要實 ISerializable 作 或 IXmlSerializable 介面。

  • 變更追蹤的支援有限。 若要利用 DataTable 類別的變更追蹤機制,實作數據行數據類型的類別必須實 IChangeTracking 作 介面,或負責通知 DataRow 何時修改數據行值,或藉由呼叫 SetModified 數據列或將數據行值物件指派給個別具現化的數據行值物件。

適用於

另請參閱