c#中,对DataSet、DataTable的操作

来源:互联网 发布:吴江法院淘宝拍卖网 编辑:程序博客网 时间:2024/06/11 08:07
   //一、对DataSet的操作:
        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态。
         */

 
原创粉丝点击