DataSet ds = new DataSet("ds_zhaozhenlong");
//使用GetChanges方法产生一个DataSet修改后的对象的DataSet集合。
DataSet chDs;
chDs = ds.GetChanges;
//如果在更改ds数据的过程中发生错误,使用DataSet对象的Merge方法把检测无错误发生的修改后的DataSet合并入原先的DataSet中
,代码如下:
ds.Merge(chDs);
//确认修改
ds.AcceptChanges();
ds.Tables.Add(new DataTable("tb_zhaozhenlong"));
ds.Tables["tb_zhaozhnelong"].Columns.Add("c1", GetType("String"));
ds.Tables["tb_zhaozhnelong"].Columns.Add("c2", GetType("String"));
ds.Tables["tb_zhaozhnelong"].Columns.Add("c3", GetType("Int32"));
ds.Tables["tb_zhaozhnelong"].PrimaryKey = new DataColumn("c1");
ds.Tables["tb_zhaozhnelong"].PrimaryKey = new DataColumn("c2");
DataColumn[] dc_r;
dc_r[0] = ds.Tables["tb_zhaozhenlong"].Columns["c1"];
dc_r[1] = ds.Tables["tb_zhaozhenlong"].Columns["c2"];
DataColumn[] dc_rd;
dc_rd[0] = ds.Tables["tb_detail"].Columns["c1"];
dc_rd[1] = ds.Tables["tb_detail"].Columns["c2"];
ds.Relations.Add("fk_zhaozhenlong", dc_r, dc_rd);
//DataRow[] dr = ds.Tables["tb_zhaozhenlong"].ChildRelations["fk_zhaozhenlong"].GetChildRow(ds.Table
["tb_zhaozhenlong"].Rows[0]);
//一致性约束
ForeignKeyConstraint fk_1 = new ForeignKeyConstraint(dc_r, dc_rd);
fk_1.UpdateRule =Default;
ds.Tables["tb_zhaozhenlong"].Constraints.Add(fk_1);
/*
ForeignKeyConstraint有五个可能的值如下:
?Cascade 当表中记录被删除或者更新以后,对应表中的记录相应被删除和更新
?SetNull 当表中记录被删除或者更新以后,对应表中的记录被置为Null
?SetDefault 当表中记录被删除或者更新以后,对应表中的记录被置为缺省值
?None 当表中记录被删除或者更新以后,对应表中的记录不做任何处理
?Default 当表中记录被删除或者更新以后,ForeignKeyConstraint采用其缺省值,通常该值为Cascade
*/
//唯一性约束
UniqueConstraint uc_1 = new UniqueConstraint(ds.Tables["tb_zhaozhenlong"].Columns["c1"]);
ds.Tables["tb_zhaozhenlong"].Constraints.Add(uc_1);
//二、对 DataTable的操作
DataTable my_tb = new DataTable("MyTable");
DataColumn dc0 = new DataColumn("c0", System.Type.GetType("Int32"));
//自动递增
dc0.AutoIncrement = true;
dc0.AllowDBNull = false;
dc0.Unique = true;
my_tb.Columns.Add(dc0);
my_tb.PrimaryKey = dc0;
DataColumn dc1 = new DataColumn("c1", System.Type.GetType("Double"));
DataColumn dc2 = new DataColumn("c2", System.Type.GetType("Double"));
//表达式
my_tb.Columns.Add("c3", System.Type.GetType("Double"), ("c1+c2") * 0.2);
my_tb.Columns.Add(dc1);
my_tb.Columns.Add(dc2);
my_tb.CaseSensitive = false;
my_tb.MinimumCapacity = 4000;
ds.Tables.Add(my_tb);
//
int i=0, n = 10;
DataRow dr ;
for (i; i < n; i++)
{
dr = my_tb.NewRow();
dr["c1"] = 2;
dr["c2"] = 4;
my_tb.Rows.Add(dr);
}
//
my_tb.Rows.Remove(4);
//delete+acceptChanges = Remove
my_tb.Rows[2].Delete;
my_tb.AcceptChanges();
//my_tb.RejectChanges();
/*
* 对于DataTable中的每一个Row,它都可能有三种状态:Original、Current、Preposed。
* Original状态是指当数据第一次被加入到数据表中时候的状态。
* Current态指经过多次改变Original数据后得到的Row。
* Preposed态存在于一个相当短暂的时期,它是由original态过渡到Current态时的中间状态,
* 一个明显的例子是对数据进行修改而尚未完成时,开始是Original态,完成后是Current态,而这之间就是Preposed态。
*/