本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!
DataTable
是一个临时保存数据的网格虚拟表(表示内存中数据的一个表。)。DataTable是ADO dot net 库中的核心对象。它可以被应用在 VB 和 ASP 上。它无须代码就可以简单的绑定数据库。它具有微软风格的用户界面。
其他使用DataTable的对象包括DataSet和DataView。
中文名
数据表
外文名
DataTable属 于
临时保存数据的网格虚拟表
类 别
ADO dot net 库中的核心对象
应 用
VB和ASP 上
数据表概述
编辑
语音
DataTable 是一个临时保存数据的网格虚拟表(表示内存中数据的一个表)。DataTable是ADO dot net 库中的核心对象。它可以被应用在 VB 和 ASP 上。它无须代码就可以简单的绑定数据库。它具有微软风格的用户界面。
其他使用DataTable的对象包括DataSet和DataView。
数据表注意事项
编辑
语音
当访问DataTable对象时,请注意它们是按条件区分大小写的。例如,如果一个DataTable被命名为“mydatatable”,另一个被命名为“Mydatatable”,则用于搜索其中一个表的字符串被认为是区分大小写的。但是,如果“mydatatable”存在而“Mydatatable”不存在,则认为该搜索字符串不区分大小写。一个DataSet可以包含数个DataTable对象,它们具有相同的TableName属性值和不同的Namespace属性值。有关使用DataTable对象的更多信息。
数据表用法介绍
编辑
语音
创建 DataTable
DataTable 表示一个内存内关系数据的表,可以独立创建和使用,也可以由其他 .NET Framework 对象使用,最常见的情况是作为 DataSet 的成员使用。
可以使用相应的 DataTable 构造函数创建 DataTable 对象。 可以通过使用 Add 方法将其添加到 DataTable 对象的 Tables 集合中,将其添加到 DataSet 中。
也可以通过以下方法创建 DataTable 对象:使用 DataAdapter 对象的 Fill 方法或 FillSchema 方法在 DataSet 中创建,或者使用 DataSet 的 ReadXml、ReadXmlSchema或InferXmlSchema 方法从预定义的或推断的 XML 架构中创建。 请注意,将一个 DataTable 作为成员添加到一个 DataSet 的 Tables 集合中后,不能再将其添加到任何其他 DataSet的表集合中。
初次创建 DataTable 时,是没有架构(即结构)的。 要定义表的架构,必须创建 DataColumn 对象并将其添加到表的 Columns 集合中。 您也可以为表定义主键列,并且可以创建Constraint 对象并将其添加到表的 Constraints 集合中。 在为 DataTable定义了架构之后,可通过将 DataRow 对象添加到表的 Rows 集合中来将数据行添加到表中。
创建 DataTable 时,不需要为 TableName 属性提供值,您可以在其他时间指定该属性,或者将其保留为空。 但是,在将一个没有 TableName 值的表添加到 DataSet 中时,该表会得到一个从“Table”(表示 Table0)开始递增的默认名称 Tablen。
DataTable 架构定义
表的架构(即结构)由列和约束表示。 使用 DataColumn 对象以及 ForeignKeyConstraint 和 UniqueConstraint 对象定义 DataTable 的架构。 表中的列可以映射到数据源中的列、包含从表达式计算所得的值、自动递增它们的值,或包含主键值。
按名称引用表中的列、关系和约束是区分大小写的。 因此,一个表中可以存在两个或两个以上名称相同(但大小写不同)的列、关系或约束。 例如,您可以有 Col1 和 col1。 在这种情况下,按名称引用某一列就必须完全符合该列名的大小写,否则会引发异常。 例如,如果表 myTable 包含列 Col1 和列 col1,就要以 myTable.Columns["Col1"] 的形式来按名称引用 Col1,而以 myTable.Columns["col1"]的形式按名称引用col1。 尝试以 myTable.Columns["COL1"] 的形式来引用其中某列就会产生异常。
如果某个特定名称只存在一个列、关系或约束,则不应用区分大小写规则。 也就是说,如果表中没有其他的列、关系或约束对象与该特定列、关系或约束对象的名称匹配,您就可以使用任意的大小写来按名称引用该对象,并且不会引发异常。 例如,如果表中只有 Col1,您就可以使用 my.Columns["COL1"] 来引用。
在 DataTable 中处理数据
在 DataSet 中创建 DataTable 之后,您执行的活动可以与使用数据库中的表时执行的活动相同。 您可以添加、查看、编辑和删除表中的数据;可以监视错误和事件;并且可以查询表中的数据。 在修改 DataTable 中的数据时,您也可以验证更改是否正确,并决定是否以编程方式接受更改或拒绝更改。
向数据表中添加数据
说明如何创建新行并将它们添加到表中。
查看数据表中的数据
说明如何访问行中的数据,包括数据的原始版本和当前版本。
Load 方法
说明如何通过 Load 方法使用行填充 DataTable。
DataTable 编辑
说明如何修改行中的数据,包括挂起对行的更改,直至验证并接受了建议的更改。
行状态与行版本
提供有关行的不同状态的信息。
DataRow 删除
说明如何从表中移除行。
行错误信息
说明如何插入每行的错误信息,帮助解决应用程序中的数据问题。
AcceptChanges 和 RejectChanges
说明如何接受或拒绝对行的更改。
构造函数
初始化 DataTable 类的新实例。
重载此成员。有关此成员的完整信息(包括语法、用法和示例),请单击重载列表中的相应名称。
名称说明
DataTable()不带参数初始化 DataTable 类的新实例。
DataTable(String)用指定的表名初始化 DataTable 类的新实例。
DataTable(SerializationInfo, StreamingContext)使用 SerializationInfo 和 StreamingContext 初始化 DataTable 类的新实例。
DataTable(String, String)用指定的表名和命名空间初始化 DataTable 类的新实例。
属性
名称说明
CaseSensitive指示表中的字符串比较是否区分大小写。
ChildRelations获取此 DataTable 的子关系的集合。
Columns获取属于该表的列的集合。
Constraints获取由该表维护的约束的集合。
Container获取组件的容器。 (继承自 MarshalByValueComponent。)
DataSet获取此表所属的 DataSet。
DefaultView获取可能包括筛选视图或游标位置的表的自定义视图。
DesignMode获取指示组件当前是否处于设计模式的值。 (继承自 MarshalByValueComponent。)
DisplayExpression获取或设置一个表达式,该表达式返回的值用于表示用户界面中的此表。 DisplayExpression 属性用于在用户界面中显示此表的名称。
Events获取附加到该组件的事件处理程序的列表。 (继承自 MarshalByValueComponent。)
ExtendedProperties获取自定义用户信息的集合。
HasErrors获取一个值,该值指示该表所属的 DataSet 的任何表的任何行中是否有错误。
IsInitialized获取一个值,该值指示是否已初始化 DataTable。
Locale获取或设置用于比较表中字符串的区域设置信息。
MinimumCapacity获取或设置该表最初的起始大小。
Namespace获取或设置 DataTable 中所存储数据的 XML 表示形式的命名空间。
ParentRelations获取该 DataTable 的父关系的集合。
Prefix获取或设置 DataTable 中所存储数据的 XML 表示形式的命名空间。
PrimaryKey获取或设置充当数据表主键的列的数组。
RemotingFormat获取或设置序列化格式。
Rows获取属于该表的行的集合。
Site获取或设置 DataTable 的 System.ComponentModel.ISite。 (重写 MarshalByValueComponent.Site。)
TableName获取或设置 DataTable 的名称。
显式接口实现
名称说明
IListSource.GetList有关此成员的说明,请参见 IListSource.GetList。
IXmlSerializable.GetSchema有关此成员的说明,请参见 IXmlSerializable.GetSchema。
IXmlSerializable.ReadXml有关此成员的说明,请参见 IXmlSerializable.ReadXml。
IXmlSerializable.WriteXml有关此成员的说明,请参见 IXmlSerializable.WriteXml。
方法
名称说明
AcceptChanges提交自上次调用 AcceptChanges 以来对该表进行的所有更改。
BeginInit开始初始化在窗体上使用或由另一个组件使用的 DataTable。 初始化发生在运行时。
BeginLoadData在加载数据时关闭通知、索引维护和约束。
Clear清除所有数据的 DataTable。
Clone克隆 DataTable 的结构,包括所有 DataTable 架构和约束。
Compute计算用来传递筛选条件的当前行上的给定表达式。
Copy复制该 DataTable 的结构和数据。
CreateDataReader返回与此 DataTable 中的数据相对应的 DataTableReader。
CreateInstance基础结构。创建 DataTable 的一个新实例。
Dispose()释放由 MarshalByValueComponent 使用的所有资源。 (继承自 MarshalByValueComponent。)
Dispose(Boolean)释放由 MarshalByValueComponent 占用的非托管资源,还可以另外再释放托管资源。 (继承自 MarshalByValueComponent。)
EndInit结束在窗体上使用或由另一个组件使用的 DataTable 的初始化。 初始化发生在运行时。
EndLoadData在加载数据后打开通知、索引维护和约束。
Equals(Object)确定指定的对象是否等于当前对象。 (继承自 Object。)
Finalize允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 MarshalByValueComponent。)
GetChanges()获取 DataTable 的副本,该副本包含自加载以来或自上次调用 AcceptChanges 以来对该数据集进行的所有更改。
GetChanges(DataRowState)获取由 DataRowState 筛选的 DataTable 的副本,该副本包含上次加载以来或调用 AcceptChanges 以来对该数据集进行的所有更改。
GetDataTableSchema该方法返回一个包含 Web 服务描述语言 (WSDL) 的 XmlSchemaSet 实例,该语言描述了用作 Web 服务的 DataTable。
GetErrors获取包含错误的 DataRow 对象的数组。
GetHashCode作为默认哈希函数。 (继承自 Object。)
GetObjectData用序列化 DataTable 所需的数据填充序列化信息对象。
GetRowType基础结构。获取行类型。
GetSchema基础结构。有关此成员的说明,请参见 IXmlSerializable.GetSchema。
GetService获取 IServiceProvider 的实施者。 (继承自 MarshalByValueComponent。)
GetType获取当前实例的 Type。 (继承自 Object。)
ImportRow将 DataRow 复制到 DataTable 中,保留任何属性设置以及初始值和当前值。
Load(IDataReader)通过所提供的 IDataReader,用某个数据源的值填充 DataTable。 如果 DataTable 已经包含行,则从数据源传入的数据将与现有的行合并。
Load(IDataReader, LoadOption)通过所提供的 IDataReader,用某个数据源的值填充 DataTable。 如果 DataTable 已包含行,则从数据源传入的数据将根据loadOption 参数的值与现有的行合并。
Load(IDataReader, LoadOption, FillErrorEventHandler)通过所提供的使用错误处理委托的 IDataReader 用某个数据源中的值填充 DataTable。
LoadDataRow(Object[], Boolean)查找和更新特定行。 如果找不到任何匹配行,则使用给定值创建新行。
LoadDataRow(Object[], LoadOption)查找和更新特定行。 如果找不到任何匹配行,则使用给定值创建新行。
MemberwiseClone创建当前 Object 的浅表副本。 (继承自 Object。)
Merge(DataTable)将指定的 DataTable 与当前的 DataTable 合并。
Merge(DataTable, Boolean)将指定的 DataTable 与当前的 DataTable 合并,指示是否在当前的 DataTable 中保留更改。
Merge(DataTable, Boolean, MissingSchemaAction)将指定的 DataTable 与当前的 DataTable 合并,指示是否在当前的 DataTable 中保留更改以及如何处理缺失的架构。
NewRow创建与该表具有相同架构的新 DataRow。
NewRowArray基础结构。返回 DataRow 的数组。
NewRowFromBuilder从现有的行创建新行。
OnColumnChanged引发 ColumnChanged 事件。
OnColumnChanging引发 ColumnChanging 事件。
OnPropertyChanging引发 PropertyChanged 事件。
OnRemoveColumn通知 DataTable:DataColumn 正在被移除。
OnRowChanged引发 RowChanged 事件。
OnRowChanging引发 RowChanging 事件。
OnRowDeleted引发 RowDeleted 事件。
OnRowDeleting引发 RowDeleting 事件。
OnTableCleared引发 TableCleared 事件。
OnTableClearing引发 TableClearing 事件。
OnTableNewRow引发 TableNewRow 事件。
ReadXml(Stream)使用指定的 Stream 将 XML 架构和数据读入 DataTable。
ReadXml(String)将指定文件中的 XML 架构和数据读入 DataTable 中。
ReadXml(TextReader)使用指定的 TextReader 将 XML 架构和数据读入 DataTable。
ReadXml(XmlReader)使用指定的 XmlReader 将 XML 架构和数据读入 DataTable。
ReadXmlSchema(Stream)使用指定流将 XML 架构读入 DataTable 中。
ReadXmlSchema(String)将指定文件中的 XML 架构读入 DataTable 中。
ReadXmlSchema(TextReader)使用指定的 TextReader 将 XML 架构读入 DataTable 中。
ReadXmlSchema(XmlReader)使用指定的 XmlReader 将 XML 架构读入 DataTable 中。
ReadXmlSerializable基础结构。从 XML 流中读取。
RejectChanges回滚自该表加载以来或上次调用 AcceptChanges 以来对该表进行的所有更改。
Reset将 DataTable 重置为其初始状态。 重置将移除表的所有数据、索引、关系和列。 如果数据集包含一个数据表,则在重置该表之后,它将仍是数据集的一部分。
Select()获取所有 DataRow 对象的数组。
Select(String)获取按与筛选条件相匹配的所有 DataRow 对象的数组。
Select(String, String)获取按照指定的排序顺序且与筛选条件相匹配的所有 DataRow 对象的数组。
Select(String, String, DataViewRowState)获取与排序顺序中的筛选器以及指定的状态相匹配的所有 DataRow 对象的数组。
ToString获取 TableName 和 DisplayExpression(如果有一个用作连接字符串)。 (重写 MarshalByValueComponent.ToString()。)
WriteXml(Stream)使用指定的 Stream 以 XML 格式写入 DataTable 的当前内容。
WriteXml(String)使用指定的文件以 XML 格式写入 DataTable 的当前内容。
WriteXml(TextWriter)使用指定的 TextWriter 以 XML 格式写入 DataTable 的当前内容。
WriteXml(XmlWriter)使用指定的 XmlWriter 以 XML 格式写入 DataTable 的当前内容。
WriteXml(Stream, Boolean)使用指定的 Stream 以 XML 格式写入 DataTable 的当前内容。 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为 true。
WriteXml(Stream, XmlWriteMode)使用指定的 XmlWriteMode 将 DataTable 的当前数据写入指定的文件,还可以选择将架构写入指定的文件。 若要写架构,请将mode 参数的值设置为 WriteSchema。
WriteXml(String, Boolean)使用指定的文件以 XML 格式写入 DataTable 的当前内容。 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为true。
WriteXml(String, XmlWriteMode)使用指定的文件和 XmlWriteMode,写入 DataTable 的当前数据(还可以选择写入架构)。 若要写架构,请将 mode 参数的值设置为 WriteSchema。
WriteXml(TextWriter, Boolean)使用指定的 TextWriter 以 XML 格式写入 DataTable 的当前内容。 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为 true。
WriteXml(TextWriter, XmlWriteMode)使用指定的 TextWriter 和 XmlWriteMode 写入 DataTable 的当前数据,还可以选择写入架构。 若要写架构,请将 mode 参数的值设置为 WriteSchema。
WriteXml(XmlWriter, Boolean)使用指定的 XmlWriter 以 XML 格式写入 DataTable 的当前内容。
WriteXml(XmlWriter, XmlWriteMode)使用指定的 XmlWriter 和 XmlWriteMode 写入 DataTable 的当前数据,还可以选择写入架构。 若要写架构,请将 mode 参数的值设置为 WriteSchema。
WriteXml(Stream, XmlWriteMode, Boolean)使用指定的 XmlWriteMode 将 DataTable 的当前数据写入指定的文件,还可以选择将架构写入指定的文件。 若要写架构,请将mode 参数的值设置为 WriteSchema。 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为 true。
WriteXml(String, XmlWriteMode, Boolean)使用指定的文件和 XmlWriteMode,写入 DataTable 的当前数据(还可以选择写入架构)。 若要写架构,请将 mode 参数的值设置为 WriteSchema。 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为 true。
WriteXml(TextWriter, XmlWriteMode, Boolean)使用指定的 TextWriter 和 XmlWriteMode 写入 DataTable 的当前数据,还可以选择写入架构。 若要写架构,请将 mode 参数的值设置为 WriteSchema。 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为 true。
WriteXml(XmlWriter, XmlWriteMode, Boolean)使用指定的 XmlWriter 和 XmlWriteMode 写入 DataTable 的当前数据,还可以选择写入架构。 若要写架构,请将 mode 参数的值设置为 WriteSchema。 若要保存该表及其所有子代的数据,请将 writeHierarchy 参数设置为 true。
WriteXmlSchema(Stream)将 DataTable 的当前数据结构以 XML 架构形式写入指定的流。
WriteXmlSchema(String)将 DataTable 的当前数据结构以 XML 架构形式写入指定的文件。
WriteXmlSchema(TextWriter)使用指定的 TextWriter 将 DataTable 的当前数据结构编写为 XML 架构。
WriteXmlSchema(XmlWriter)使用指定的 XmlWriter 将 DataTable 的当前数据结构以 XML 架构形式写入。
WriteXmlSchema(Stream, Boolean)将 DataTable 的当前数据结构以 XML 架构形式写入指定的流。 若要保存该表及其所有子代的架构,请将 writeHierarchy 参数设置为 true。
WriteXmlSchema(String, Boolean)将 DataTable 的当前数据结构以 XML 架构形式写入指定的文件。 若要保存该表及其所有子代的架构,请将 writeHierarchy 参数设置为 true。
WriteXmlSchema(TextWriter, Boolean)使用指定的 TextWriter 将 DataTable 的当前数据结构编写为 XML 架构。 若要保存该表及其所有子代的架构,请将 writeHierarchy参数设置为 true。
WriteXmlSchema(XmlWriter, Boolean)使用指定的 XmlWriter 将 DataTable 的当前数据结构以 XML 架构形式写入。 若要保存该表及其所有子代的架构,请将writeHierarchy 参数设置为 true。
扩展方法
名称说明
AsDataView创建并返回支持 LINQ 的 DataView 对象。 (由 DataTableExtensions 定义。)
AsEnumerable返回一个 IEnumerable 对象,其泛型参数 T 为 DataRow。 此对象可用在 LINQ 表达式或方法查询中。 (由 DataTableExtensions 定义。)
DataTable 事件
名称说明
ColumnChanged在 DataRow 中指定的 DataColumn 的值被更改后发生。
ColumnChanging在 DataRow 中指定的 DataColumn 的值发生更改时发生。
Disposed添加事件处理程序以侦听组件上的 Disposed 事件。 (继承自 MarshalByValueComponent。)
Initialized初始化 DataTable 后发生。
RowChanged在成功更改 DataRow 之后发生。
RowChanging在 DataRow 正在更改时发生。
RowDeleted在表中的行已被删除后发生。
RowDeleting在表中的行要被删除之前发生。
TableCleared清除 DataTable 后发生。
TableClearing清除 DataTable 后发生。
TableNewRow插入新 DataRow 时发生。
数据表实例化添加列
编辑
语音
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
DataRow dr = dt.NewRow();
object[] objs = { 1, "Name" };
dr.ItemArray = objs;
dt.Rows.Add(dr);
this.dataGridView1.DataSource = dt;
数据表使用技巧
编辑
语音
(1)CreateaDataTable DataTabledt=newDataTable("Table_AX");
(2)AddcolumnsforDataTable //Method1 dt.Columns.Add("column0",System.Type.GetType("System.String")); //Method2 DataColumndc=newDataColumn("column1",System.Type.GetType("System.Boolean")); dt.Columns.Add(dc); (3)AddrowsforDataTable //Initializetherow DataRowdr=dt.NewRow(); dr["column0"]="AX"; dr["column1"]=true; dt.Rows.Add(dr); //Doesn'tinitializetherow DataRowdr1=dt.NewRow(); dt.Rows.Add(dr1);
(4)Selectrow //Searchthesecondrow如果没有赋值,则用isnull来select DataRow[]drs=dt.Select("column1isnull"); DataRow[]drss=dt.Select("column0='AX'");
(5)CopyDataTableincludedata DataTabledtNew=dt.Copy(); (6)CopyDataTableonlyscheme DataTabledtOnlyScheme=dt.Clone(); (7)Operateonerow //对dt的操作 //Method1 DataRowdrOperate=dt.Rows[0]; drOperate["column0"]="AXzhz"; drOperate["column1"]=false; //Method2 drOperate[0]="AXzhz"; drOperate[1]=false; //Method3 dt.Rows[0]["column0"]="AXzhz"; dt.Rows[0]["column1"]=false; //Method4 dt.Rows[0][0]="AXzhz"; dt.Rows[0][1]=false; (8)EvaluateanotherDataTable'srowtocurrentDatatable dtOnlyScheme.Rows.Add(dt.Rows[0].ItemArray); (9)Converttostring System.IO.StringWritersw=newSystem.IO.StringWriter(); System.Xml.XmlTextWriterxw=newSystem.Xml.XmlTextWriter(sw); dt.WriteXml(xw); strings=sw.ToString(); (10)FilterDataTable dt.DefaultView.RowFilter="column1<>true"; dt.DefaultView.RowFilter="column1=true"; (11)Sortrow dt.DefaultView.Sort="ID,NameASC"; dt=dt.DefaultView.ToTable(); (12)BindDataTable //绑定的其实是DefaultView gvTestDataTable.DataSource=dt; gvTestDataTable.DataBind(); (13)judgetheDataTable’sColumnnameisastring //判断一个字符串是否为DataTable的列名 dtInfo.Columns.Contains("AX"); (14)DataTableconverttoXMLandXMLconverttoDataTable protectedvoidPage_Load(objectsender,EventArgse) { DataTabledt_AX=newDataTable(); //dt_AX.Columns.Add("Sex",typeof(System.Boolean)); //DataRowdr=dt_AX.NewRow(); //dr["Sex"]=true; //dt_AX.Rows.Add(dr); stringxml=ConvertBetweenDataTableAndXML_AX(dt_AX); DataTabledt=ConvertBetweenDataTableAndXML_AX(xml); } publicstringConvertBetweenDataTableAndXML_AX(DataTabledtNeedCoveret) { System.IO.TextWritertw=newSystem.IO.StringWriter(); //ifTableNameisempty,WriteXml()willthrowException.
dtNeedCoveret.TableName=dtNeedCoveret.TableName.Length==0?"Table_AX":dtNeedCoveret.TableName; dtNeedCoveret.WriteXml(tw); dtNeedCoveret.WriteXmlSchema(tw); returntw.ToString(); } publicDataTableConvertBetweenDataTableAndXML_AX(stringxml) { System.IO.TextReadertrDataTable=newSystem.IO.StringReader(xml.Substring(0,xml.IndexOf("<?xml "))); System.IO.TextReadertrSchema=newSystem.IO.StringReader(xml.Substring(xml.IndexOf("<?xml"))); DataTabledtReturn=newDataTable(); dtReturn.ReadXmlSchema(trSchema); dtReturn.ReadXml(trDataTable); returndtReturn; }
数据表数据复制
编辑
语音
把datatable的结构全部数据或部分数据复制到一个新的datatable
datatable复制表结构:我们可以使用.clone()方法;
DataTable oldDT = GetDataTable();
DataTable newDT = oldDT.Clone();
把datatable中的所有信息复制到一个新的datatable,包括结构和数据:
DataTable oldDT = GetDataTable();
DataTable newDT = oldDT.Copy();
复制datatable中的某一行:我们可以使用.ImportRow()方法;
DataTable oldDT = GetDataTable();
DataTable newDT = new DataTable();
newDT.ImportRow(oldDT.Rows[1]);把原来datatable中的第二行数据复制到新的datatable中。