向数据表中添加列 (ADO.NET)
DataTable 包含了由表的 Columns 属性引用的 DataColumn 对象的集合。这个列的集合与任何约束一起定义表的架构(即结构)。
通过使用 DataColumn 构造函数,或者通过调用表的 Columns 属性的 Add 方法(它是一个 DataColumnCollection),可在表内创建 DataColumn 对象。Add 方法将接受可选的 ColumnName、DataType 和 Expression 参数,并将创建新的 DataColumn 作为集合的成员。它还会接受现有的 DataColumn 对象并会将其添加到集合中,并会根据请求返回对所添加的 DataColumn 的引用。由于 DataTable 对象不特定于任何数据源,所以在指定 DataColumn 的数据类型时会使用 .NET Framework 类型。
以下示例向 DataTable 中添加了四列。
Dim workTable As DataTable = New DataTable("Customers")
Dim workCol As DataColumn = workTable.Columns.Add( _
"CustID", Type.GetType("System.Int32"))
workCol.AllowDBNull = false
workCol.Unique = true
workTable.Columns.Add("CustLName", Type.GetType("System.String"))
workTable.Columns.Add("CustFName", Type.GetType("System.String"))
workTable.Columns.Add("Purchases", Type.GetType("System.Double"))
DataTable workTable = new DataTable("Customers");
DataColumn workCol = workTable.Columns.Add("CustID", typeof(Int32));
workCol.AllowDBNull = false;
workCol.Unique = true;
workTable.Columns.Add("CustLName", typeof(String));
workTable.Columns.Add("CustFName", typeof(String));
workTable.Columns.Add("Purchases", typeof(Double));
请注意,示例中用于 CustID 列的属性设置为不允许 DBNull 值并将值约束为唯一。但是,如果您将 CustID 列定义为表的主键列,AllowDBNull 属性就会自动设置为 false,并且 Unique 属性会自动设置为 true。有关更多信息,请参见定义主键 (ADO.NET)。
警告 |
---|
如果没有为一个列提供列名,则在将该列添加到 DataColumnCollection 时,该列会得到从“Column1”开始递增的默认名称 ColumnN。建议在提供列名时避免使用“ColumnN”命名约定,因为那样提供的名称可能与 DataColumnCollection 中现有的默认列名冲突。如果提供的名称已经存在,将引发异常。 |
如果将 XElement 用作 DataTable 中的 DataColumn 的 DataType,则在读入数据时,XML 序列化将不起作用。例如,如果通过使用 DataTable.WriteXml 方法来写出 XmlDocument,则在序列化为 XML 时,XElement 中会出现一个额外的父节点。若要解决此问题,请使用 SqlXml 类型来代替 XElement。ReadXml 和 WriteXml 对 SqlXml 均能正确使用。