DataSet及DataTable⽤法详解
DataSet是ADO.NET开发⼈员为⽅便数据处理开发出来的,是数据的集合,是为解决DataReader的缺陷设计的,DataReader数据处理速度快,但它是只读的, ⽽且⼀旦移到下⼀⾏,就不能查看上⼀⾏的数据,DataSet则可以⾃由移动指针。DataSet的数据是与数据库断开的。DataSet还可⽤于多层应⽤程序中,如果应⽤程序运⾏在中间层的业务对象中来访问数据库,则业务对象需将脱机数据结构传递给客户应⽤程序。
DataSet的功能:浏览、排序、搜索、过滤、处理分级数据、缓存更改等。还可以与XML数据互换。DataSet中可包括多个DataTable,可将多个查询结构存到⼀个DataSet中,⽅便操作,⽽DataTable中⼜包括多个DataRow、DataColumn,可通过这些DataRow、DataColumn来查看、操作其中的数据,⽽需将操作结果返回给数据库的话,则可以调⽤DataAdapter的 Update⽅法。
DataSet的操作:
DataSet ds=new DataSet();
DataTable dt=new DataTable("newTable");
ds.Tables.Add(dt);
DataSet ds=new DataSet();
DataTable dt=ds.Tables.Add("newTable");
上述两种⽅法都可以在DataSet中添加⼀个DataTable,看需要⽽进⾏选择。添加DataTable后,需向其中添加⾏和列。
DataSet ds=new DataSet();
DataTable dt=ds.Tables.Add("newTables");
DataColumn col=dt.Columns.Add("newColumn",typeof(int));
col.AllowDBNull=false;
typeof的用法col.MaxLength=4;
col.Unique=true;
上述代码向DataSet中的DataTable中添加名为”newColumn”,类型为int且不为空,最⼤长度为4和唯⼀性为真的列。
dt.PrimaryKey=new DataColumn[] {dt.Columns["ID"]}
这段代码是继续上⾯代码的,为⼀个DataTable中添加⼀个主键列,主键列是⼀个数据组,如有多个主键,只需在数组中添加⼀个列即可。如下:
dt.PrimaryKey=new DataColumns[] {dt.Columns["OrderID"],dt.Columns["ProductID"]}
添加外键:
ForeignKeyConstraint fk;
fk=new ForeignKeyConstraint(ds.Tables["Customers"].Columns["CustomerID"],ds.Tables["Orders"].Columns["CustomerID"]);
ds.Tables["Orders"].Constraints.Add(fk);
//上述代码假如已经为Cusomers表和Orders创建了主键,此句为添加外键约束。
上述是根据Customers表和Orders表的CustomerID来创建约束。
下⾯介绍修改DataRow中的内容:
DataRow dr=ds.Tables["Customer"].Rows.Find("ANTON");
if(dr==null)
else
{
dr.BeginEdit();
dr["CompanyName"]="newValue";
dr["ContactName"]="newValue2";
dr.EndEdit();
}
//上⾯代码通过Row集合的Find⽅法来在DataTable中的⾏进⾏定位,到"ANTON"⾏,再修改"ANTON"⾏中 CompanyName列和ContactName列的值。通过BeginEdit和EndEdit来缓存对⾏的修改,还可调⽤ CancelEdit为取消修改。
判断某列是否为空值:
DataRow dr=ds.Tables["Customers"].Rows.Find("aaa");
if(dr.IsNull("ContactName");
..
else
dr["ContactName"]=DBNull.Value
//这⾥判断ContactName列是否为空,如果不是则为其赋空值,呵,很⽆厘头的做法,这⾥只为演⽰为列赋空值的做法。
删除DataRow:
有两种⽅法可以删除DataRow,Delete⽅法和Remove⽅法和RemoveAt⽅法。其区别是Delete⽅法实际上不是从 DataTable中删除掉⼀⾏,⽽是将其标志为删除,仅仅是做个记号,⽽Remove⽅法则是真正的从DataRow中删除⼀⾏,RemoveAt⽅法是根本⾏的索引来删除。列:DataRow dr=ds.Tables["table"].Rows.Find("a");
ds.Tables["table"].Remove(dr);
或
ds.Tables["table"].Remove(index);
//dr 为"a"所在的⾏,查出后将其删除,index为 "a"所在的索引号。
DataTable dt = new DataTable("Staff");
DataColumn dc;
dc = new DataColumn("ID", System.Type.GetType("System.Int32"));
dt.Columns.Add(dc);
dc = new DataColumn("BeginDate", System.Type.GetType("System.DateTime")); dt.Columns.Add(dc);
dc = new DataColumn("EndDate", System.Type.GetType("System.DateTime")); dt.Columns.Add(dc);
dc = new DataColumn("Company", System.Type.GetType("System.String"));
dt.Columns.Add(dc);
dc = new DataColumn("Department", System.Type.GetType("System.String")); dt.Columns.Add(dc);
dc = new DataColumn("Manager", System.Type.GetType("System.String"));
dt.Columns.Add(dc);
dc = new DataColumn("Telephone", System.Type.GetType("System.String"));
dt.Columns.Add(dc);
DataRow dr;
dr = dt.NewRow();
dr["ID"] = 1;
dr["BeginDate"] = System.DateTime.Today;
dr["EndDate"] = System.DateTime.Today;
dr["Company"] = "××××";
dr["Department"] = "××××";
dr["Manager"] = "××";
dr["Telephone"] = "654321";
dt.Rows.Add(dr);
dgWork.DataSource = dt;
dgWork.DataBind();
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论