




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DATATABLE详尽使用方法 转2010-03-11 09:42DataTable 是一个在内存中的数据表,可以使用工具栏里面的控件拖放来创建和使用,也可以在编写程序过程中根据需要独立创建和使用,最常见的情况是作为DataSet 的成员使用,在这种情况下就需要用在编程过程中根据需要动态创建数据表。那么在8.4节中主要讲用编码的方式来建立DataTable数据表以及对它的操 作。1 代码创建DataTable数据表如上8.3节里面所讲,通过添加对象的方式直接在DataSet中创建数据表,可以通过使用Add方法将DataTable添加到DataSet中,这种是使用控件的可视化添加DataTable的操作,那么在代码中怎么来创建DataTable数据表呢?在程序中创建DataTable对象可以使用相应的DataTable构造函数。创建一个表名为TableName的数据表,实现代码如下所示:DataTable NewTable = new DataTable(TableName);另外也可以通过以下方法创建DataTable对象:使用DataAdapter对象的Fill方法或FillSchema方法在DataSet中创建,这种方式都用于与数据库相连接操作的情况下。实现代码如下所示:/数据库联接字符串string connectionString =Data Source=local;Initial Catalog=Northwind;Integrated Security=True;UserID=saassword=;/sql语句查询string commandString = Select * from Customers;/ 创建SqlDataAdapter对象,并执行sql命令SqlDataAdapter dataAdapter = new SqlDataAdapter(commandString, connectionString);/创建数据集dataSetDataSet dataSet = new DataSet();/把数据表添加到数据集中DataTable dataTable = dataSet.Tables(Customers);/将数据填充到数据集中dataAdapter.Fill(dataSet,Customers);注意:将一个DataTable作为成员添加到一个DataSet的Tables集合中后,不能再将其添加到任何其他DataSet的表集合中。使用DataTable构造函数初次创建DataTable时,是没有架构(即结构,没有列)的。没有架构的DataTable数据表示没有办法使用的, 因此要在使用这种DataTable数据表之前要定义表的架构,必须创建DataColumn对象并将其添加到表的Columns集合中。如何使用代码创 建Columns列,将在本章后面几节中讲到。创建DataTable时,不需要为TableName属性提供值,可以在其他时间指定该属性,或者将其保留为空,这些都不影响DataTable的使 用。应该注意的是在将一个没有TableName值的表添加到DataSet中时,该表会得到一个从“Table”(表示Table0)开始递增的默认名 称TableN。以下示例创建DataTable对象的实例,并为其指定名称“Customers”。 实现代码如下所示:DataTable workTable = new DataTable(Customers);以下代码是将创建的DataTable实例Customers表添加到DataSet的Tables集合中。实现代码如下所示:DataSet customers = new DataSet();DataTable customersTable = customers.Tables.Add(CustomersTable);或者DataSet customers = new DataSet();DataTable customersTable = new DataTable(“Customers”)customers.Tables.Add(Customers);2 用编程方式添加DataTable列前面已经学过使用代码创建DataTable,但是使用DataTable构造函数初次创建 DataTable时,是没有架构(即结构,没有列)的。要定义表的架构,必须创建DataColumn 对象并将其添加到表的Columns集合中。也可以为表定义主键列,并且可以创建Constraint约束对象并将其添加到表的Constraints约 束集合中。DataColumn类型表示了DataTable上的一列。总的来说,绑定到某个DataTable的所有DataColumn类型的集合就表示一个表。DataTable包含了由表的Columns属性引用的DataColumn对象的集合。这个列的集合与任何约束一起定义表的架构(即结构)。通过使用DataColumn构造函数,或者通过调用表的Columns属性的Add方法,可在表内创建DataColumn对象。Add方法将接受可选 的ColumnName、DataType参数,并将创建新的DataColumn作为集合的成员。它还会接受现有的DataColumn对象并会将其添 加到集合中,并会根据请求返回对所添加的DataColumn的引用。以下示例向DataTable中添加了四列。实现代码如下所示:DataTable workTable = new DataTable(Customers);DataColumn workCol = workTable.Columns.Add(CustID);workTable.Columns.Add(CustLName);workTable.Columns.Add(CustFName);workTable.Columns.Add(urchases);代码说明:q CustID,CustLName,CustFName,Purchases:数据表Customers中的列名。3 设置DataTable数据表的主键数据库开发的一个通常规则就是表至少得有一个列作为主键。主键约束用于惟一标识给定表中的一条记录(行)。假设现在需要新建一个DataColumn列来 表示EmpID字段并且要将这个列将作为表的主键,它必须有AllowDBNull和Unique属性,实现代码如下所示: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(urchases, typeof(String);代码说明:示例中用于CustID列的属性设置为不允许DBNull值并将值约束为唯一。但是,如果将CustID列定义为表的主键列,AllowDBNull属性就会自动设置为false,并且Unique属性会自动设置为true。4 设置列的数据类型通过上面8.4.2节的学习已经知道怎么向新建的数据表中添加列了,那么下面来看一看,怎么为添加的列设置列的数据类型。数据类型是标明一列数据的数据类 型属性,根据不同的需要可以在DataTable数据表中建立不同的列,并可以为不同的列设置不同的数据类型,来满足需要。继续上面Customers表 的例子,为创建的列添加数据类型:实现代码如下所示:/创建一个数据表CustomersDataTable CustomersTable = new DataTable(Customers);/创建一个Int32类型名称是CustID列,把这个列设置成主键,并且不允许为空,DataColumn CustomersCol = CustomersTable.Columns.Add(CustID, typeof(Int32);CustomersCol.AllowDBNull = false;CustomersCol.Unique = true;/创建三个String类型的列CustLName,CustFName,PurchasesCustomersTable.Columns.Add(CustLName, typeof(String);CustomersTable.Columns.Add(CustFName, typeof(String);CustomersTable.Columns.Add(urchases, typeof(String);代码说明:示例中用于CustID列定义为表的主键列。CustID列指定的数据类型是Int32,CustLName列、CustFName列、 Purchases列指定的数据类型都是String的列,当然也可以不设置列的数据类型,在这个时候DataColumn的DataType属性默认为 字符串类型,当然可以根据需要在创建列名时进行列数据类型的设置。5 启用Autoincrementing字段在8.4.4节中学会了如何设置DataColumn列的数据类型,在设置完DataColumn列的数据类型以后,也可以像SQL-Server数据库 表一样把某一列设置成自动递增的。简单地说,自动增加列可以确保当一个新行被添加到给定表时,可以基于当前的递增步长值自动指定这个列的值。特别是某一列 作为没有重复值得主键的时候,这个功能就特别有用。在DataTable中这个功能可以用AutoIncrement(列是否将列的值自动递增)、 AutoIncrementSeed(起始值,种子值)和AutoIncrementStep(步长)属性来控制。下面是创建一个支持自动递增的DataColumn列的例子。种子值用于标记列的起始值,步长值表示递增时增加种子值的数值,代码如下所示:/ 创建一个新列DataColumn myColumn = new DataColumn();myColumn.ColumnName = CustID ;myColumn.DataType = System.Type.GetType(System.Int32);/ 设置自动递增myColumn.AutoIncrement = true;myColumn.AutoIncrementSeed = 0;myColumn.AutoIncrementStep = 1;代码说明:q AutoIncrement:列是否将列的值自动递增,true表示自动递增,false表示不能自动递增。q AutoIncrementSeed:起始值种子值,AutoIncrement属性设置为true的列的起始值。q AutoIncrementStep:步长,递增量,AutoIncrement属性设置为true的列的步长。创建一个数据类型为Int32的CustID列,为了能使这个字段的值实现自动增加的效果,把列AutoIncrement属性设置为true;把列得种 子值AutoIncrementSeed定为0,也就是从0开始计数;同时设置自动增加的步长AutoIncrementStep为1,每次增加一个。由 于种子值被定为0,前面5个值应该是0、1、2、3和4。可以往一个DataTable中添加这个DataColumn来测试一下。然后往这个表中添加一些新行,当然会自动转储CustID列中的值,代码如下所示:/实现列自动增加功能 protected void Button1_Click(object sender, EventArgs e) /创建一个新的数据列,名称:CustID ,数据类型:Int32. DataColumn myColumn = new DataColumn(); myColumn.ColumnName = CustID ; myColumn.DataType = System.Type.GetType(System.Int32); /把新创建的列设置自动增加,种子为0,增加步长为1. myColumn.AutoIncrement = true; myColumn.AutoIncrementSeed = 0; myColumn.AutoIncrementStep = 1; /把这个列添加到Customers表中. DataTable CustomersTable = new DataTable(Customers); myTable. CustomersTable.Add(myColumn); /添加20个新行. DataRow r; for (int i = 0; i 20; i+) r = CustomersTable.NewRow(); CustomersTable.Rows.Add(r); /显示每一行的数据值. string temp = ; DataRowCollection rows = CustomersTable.Rows; for (int i = 0; i CustomersTable.Rows.Count; i+) DataRow currRow = rows; temp += currRowCustID + ; /在Label1面显示所有值 Label1.Text = Label1.Text+temp;如果把上面代码写在建立的Web程序中,运行后点击“Button”按钮,就会得出初始值为0的步长为1的一系列数,结果如图:8.4.1所示的显示结果。6 用编程方式添加DataTable行在为DataTable定义了架构之后,也就是设置好了需要的列名以后,就可以可通过将DataRow对象添加到表的Rows集合中来将数据行添加到表 中。与添加DataColumn类似,同样可以通过使用DataRow构造函数,或者通过调用表的Rows属性的Add方法,可在表内创建DataRow 对象。DataColumn对象集合表示了表的模式(Schema)。DataTable通过内部的DataColumnCollection类型保存表中所有 列。相反,DataRow类型集合就表示表中的实际数据。这样,如果Customers表中有10个记录,就可以使用10个DataRow类型来表示它 们。使用DataRow类的成员可以对表中的值进行插入、删除、求值和操作操作。创建一个DataRow数据行的对象,实现代码如下所示:/创建一个Customers数据表DataTable CustomersTable = new DataTable(Customers );/创建一个新的数据行DataRow arow = CustomersTable.NewRow();/设置行的值arowColumnName = DataValue;/把数据行添加创建的Customers数据表中CustomersTable.Rows.Add(arow);功能说明:新建一行arow, 并给这行某一个列名付值为DataValue,最后把这一行添加到Customers表中。使用DataRow与使用DataColumn有些不同,因为 不可以直接创建这个类型的实例,而是获得一个来自给定DataTable的引用。例如,假设想往Customers表中添加新 行,DataTable.NewRow()方法可以获得下一空位,然后在上面填充每列的数据。实现代码如下所示:/创建一个数据表DataTable CustomersTable = new DataTable(Customers);/声明数据表的行和列变量DataColumn column;DataRow row;/创建一个新列,设置列的数据列性和列名,并把这个新列添加到Customers表中column=new DataColumn();column.DataType = System.Type.GetType(System.Int32);column.ColumnName = CustID ;CustomersTable.Columns.Add(column);/再创建一个新列column = new DataColumn();column.DataType = Type.GetType(System.String);column.ColumnName = CustLName ;CustomersTable.Columns.Add(column);/创建新的一行并把这个行添加到Customers表中for(int i = 0; i 10; i+)row = CustomersTable.NewRow();rowCustID = i;rowCustLName = item + i.ToString();CustomersTable.Rows.Add(row);功能说明:向CustomersTable表创建两个列分别是CustID, CustLName,然后用循环的方式产生10行并附值,添加到CustomersTable表中。7 操作DataTable:更新行在前面一节里面讲了,怎么样添加一个DataRow行,那么下面需要了解的关于DataTable的另一个方面就是怎样用新值更新已有的DataRow行。下面开始介绍关于DataTable更新行的问题。最常使用的一个方法就是先用Select()方法获得符合给定过滤条件的行。一旦获得这些DataRow,就对它们作相应的修改。例如,假定有一个新按钮 在被单击后,搜索DataTable中所有EmployeeID列值为5的行。一旦标识这些项后,就可以把EmployeeID列对应值5改为6。实例代 码如下:/数据库联接字符串string connectionString =Data Source=local;Initial Catalog=Northwind;Integrated Security=True;UserID=saassword=;/sql语句把Orders表中的数据信息都取出来string commandString = Select * from Orders;SqlDataAdapter dataAdapter = new SqlDataAdapter(commandString, connectionString);DataSet dataSet = new DataSet( );/填充数据集dataAdapter.Fill(dataSet, Orders);/填充数据表DataTable dataTable = dataSet.Tables(Orders);/ 建立一个用于过滤出EmployeeID列值为5的行的行的变量string filterStr = EmployeeID=5;string strEmployeeID = null;/ 查询出来所有EmployeeID列值为5的行.DataRow EmployeeID= dataTable.Select(filterStr);/ EmployeeID列对应值5改为6for(int i = 0; i 100);3.统计运费Freight的平均值table.Compute(Aver(Freight),true);4.统计职工编号EmployeeID为5的运费总额:table.Compute(Sum(Freight), EmployeeID=5);以上都是计算每一列的合计,那么要添加一行求合计可以使用下面的方法:/创建一个数据集DataSet customers = new DataSet();/在数据集中添加一个名称为CustomersTable的数据表DataTable customersTable = customers.Tables.Add(CustomersTable);/创建一个新行并添加到CustomersTable数据表中DataRow dataRow new DataRow();dataRow= customersTable.NewRow();/然后就是统计了,声明连个int 变量i:循环变量, colCnt: customersTable表中的列数int i ;int colCnt ;colCnt = customersTable.Cols.Count;for( i=0 ;i colCnt -1;i+)/求第i列的和并且结果赋值给新的dataRow数据行dataRow(i)= customersTable.Compute(Sum(+i.ToString()+),true);/把数据行添加到customersTable数据表中customersTable.Rows.Add(dataRow);12 DataTable和xml的一些应用总结在ASP.NET2.0中ADO.NET和XML结合的很紧密,第7章中已经详细介绍了在ADO.NET中的数据通过DataSet很容易存取在XML中 的,那么在DataTable能像在DataSet中那样操作XML数据文件吗?答案是可以的,下面就是一个将DataTable中的数据写入到XML文 件中去的操作,实例代码如下所示:/创建一个Customers数据表DataTa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 精装交付的购房合同范本
- 物业中介部租房合同范本
- 特色小镇项目的合同范本
- 电商入驻协议合同书范本
- 机器人售后维修合同范本
- 自愿放弃养老协议书模板
- 精装房定价出售合同范本
- 长山中学学生管理协议书
- 给老板签订保底合同范本
- 现金赠与避税协议书范本
- 2023年简约黑板风2023高三复学开学第一课主题班会
- 2023上海市安全员《B证》考试题库
- 语文高考专题复习【知识精讲精析+能力拓展提升 】 诗化小说之红柯《麦子》
- 城市消防站建设标准
- 烟叶制丝操作工(中级)技能检定考试题库(附答案)
- 江苏省泰州市泰兴市招聘劳动保障协理员试题及答案解析
- 石灰窑风险辨识管控、各级隐患排查清单
- GB/T 714-2015桥梁用结构钢
- GB/T 4854.1-2004声学校准测听设备的基准零级第1部分:压耳式耳机纯音基准等效阈声压级
- 风险分级管控责任清单(桥梁工程)
- 建设工程创优方案
评论
0/150
提交评论