【学习笔记】
申明DataSet的对象ds:  DataSet ds = new DataSet();
申明内存表: DataTable dt =new DataTable("表名");
内存表dt添加到DataSet实例对象ds表集合中: ds.Tables.Add("dt");
实例化一个列并设置其属性(可省略):DataColumn id = new DataColumn("id",typeof(Int32));
表中添加列并设置类型:dt.Columns.Add("列名",typeof(列类型));
申明基类数组,存放表数据:Object[] dt_arr = new object[n];(n表示数组列数)
列出数组的所有数据:dt_arr[0]=?;dt_arr[1]=?;...dt_arr[n-1]=?;(其中?字符串数据要加"")
将数组数据加到表的行中:dt.Rows.Add(dt_arr);
DataSet对象ds存放到Session中: Session["ds"]=ds;
数据绑定到GridView: Fill();
添加Fill方法:(1)从Session取出DataSet对象:ds = (DataSet)Session["ds"]; (2)读取表的数据源:表名.DataSource = ds.Tables["表名"];(3)数据绑定:表名.DataBind();
设置主键: UniqueConstraint uc = new UniqueConstraint("约束名", ds.Tables["表名"].Columns["要设置主键的列名"],true);ds.Tables["表名"].Constraints.Add(uc);
设置两个表外键: ForeignKeyConstraint fc = new ForeignKeyConstraint("约束名", ds.Tables["表名1"].Columns["主表列名"], ds.Tables["表名2"].Columns["从表列名"]);ds.Tables["表名2"].Constraints.Add(fc);
从表中获取所需的数据:ds.Tables["表名"].Rows[行索引]["列名"(列索引)].ToString();
修改表中的数据: ds.Tables["表名"].Rows[行索引]["列名"(列索引)] = "修改后的值";
多个DataAdapter填充同一个 DataSet:SqlDataAdapter sda1 = new SqlDataAdapter("select 字段1,字段2,字段3,... from 表名",ConfigurationManager.ConnectionStrings["数据源"].ConnectionString);DataSet ds = new DataSet();sda1.Fill(ds, "t1"); SqlDataAdapter sda2 = new SqlDataAdapter("select 字段1,字段2,字段3,... from 表名",ConfigurationManager.ConnectionStrings["数据源"].ConnectionString);sda2.Fill(ds, "t2");GridView1.DataSource = ds.Tables["t1"];GridView1.DataBind();GridView2.DataSource = ds.Tables["t2"];GridView2.DataBind();
另一种方法(SelectCommand)填充同一个DataSet: SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["数据源"].ConnectionString);SqlDataAdapter sda = new SqlDataAdapter();sda.SelectCommand = new SqlCommand("select 字段1,字段2,字段3,... from 表名",conn);DataSet ds = new DataSet();sda.Fill(ds,"t1");sda.SelectCommand = new SqlCommand("select 字段1,字段2,字段3,... from 表名", conn);sda.Fill(ds,"t2");
外键关联方法:UniqueConstraint uc = new UniqueConstraint("t1",ds.Tables["t1"].Columns["列名"],true);ds.Tables["t1"].Constraints.Add(uc);ForeignKeyConstraint fkc = new ForeignKeyConstraint("f1", ds.Tables["t1"].Columns["外键列名"], ds.Tables["t2"].Columns["外键列名"]);ds.Tables["t2"].Constraints.Add(fkc);ds.Tables["t2"].Constraints.Add(fkc);Session["ds"]=ds;Response.Write(ds.Relations.Count);Fill();
按照主键值删除行: DataSet ds = (DataSet)Session["ds"];
        string  keys = GridView1.DataKeys[e.RowIndex].Value.ToString();
       DataRow dr=ds.Tables["t1"].Rows.Find(keys);
        ds.Tables["t1"].Rows.Remove(dr); Fill();
两个数据DataSet合并:DataSet ds = (DataSet)Session["ds"];DataSet ds1 = (DataSet)Session["ds1"];ds.Merge(ds1,false); //false不保留DataSet更改的数据,true 保留
缓存DataSet到服务器:DataSet ds = (DataSet)Cache.Get("缓存名"); //取出Cache
if (ds == null)
            {   连接数据库的三句话(SqlConnection conn、SqlDataAdapter sda、sda.SelectCommand)
                DataSet cds = new DataSet();
                sda.Fill(cds, "t1");
                cds.ExtendedProperties.Add("ds_t1", DateTime.Now.ToLongTimeString());
                Cache.Insert("缓存名", cds, null, DateTime.Now.AddMinutes(2), TimeSpan.Zero);//存入Cache  Response.Write("对象已经从数据库填充并存入Cache");
                GridView1.DataSource = cds.Tables["t1"];
                GridView1.DataBind();
            }
            else
            {
                Response.Write("对象还在缓存中,直接调用");
                GridView1.DataSource = ds.Tables["t1"];
                GridView1.DataBind();
            } 
清除缓存:Cache.Remove("缓存名");
 
【自建数据表具体实例代码】
 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //申明一个小型数据库ds对象
            DataSet ds = new DataSet("one");
            //申明两个内存表
            DataTable dt1 = new DataTable("user");
            DataTable dt2 = new DataTable("blog");
            //将两个内存表增加到Dataset对象ds的表集合中
            ds.Tables.Add(dt1);
            ds.Tables.Add(dt2);
            =========实例化一个新的列===================
            //DataColumn id = new DataColumn("id", typeof(Int32));
            //id.AutoIncrement = true;
            //id.AutoIncrementStep = 1;
            //id.Unique = true;
            =========这样是为这个列设置更多的属性=======
            //dt1.Columns.Add(id);//将上面设置好的列加到表中去
 
            //增加表1中的列,设置列的类型
            dt1.Columns.Add("id", typeof(Int32));
            dt1.Columns.Add("name", typeof(string));
            dt1.Columns.Add("age", typeof(Int32));
            //添加表2中的列,设置列的类型
            dt2.Columns.Add("title", typeof(string));
            dt2.Columns.Add("url", typeof(string));
            dt2.Columns.Add("id", typeof(Int32));
            //申明基类数组,存放表中的数据
            Object[] dt1_arr = new object[3];
            Object[] dt2_arr = new object[3];
            //申明两个存放数据的数组
            dt1_arr[0] = 1;
            dt1_arr[1] = "天神";
            dt1_arr[2] = 23;
            dt2_arr[0] = "麦迪天神的BLOG";
            dt2_arr[1] = " http://blog.sina.com.cn/tracymcgrady";
            dt2_arr[2] = 1;
            //将数据加到表的行中去
            dt1.Rows.Add(dt1_arr);
            dt2.Rows.Add(dt2_arr);
            //将数据存放到Session中
            Session["ds"] = ds;
            //调用Fill()方法将数据绑定到GridView中去
            Fill();
        }
    }
 
   private void Fill()   //自定义的函数Fill()
    {
       //两个表数据绑定
        DataSet ds = new DataSet();
        ds = (DataSet)Session["ds"];
        user.DataSource = ds.Tables["user"];
        user.DataBind();
        blog.DataSource = ds.Tables["blog"];
        blog.DataBind();
    }

   protected void unique_Click(object sender, EventArgs e)  //一个名为unique的按钮
   {
       //设置主键
       DataSet ds = new DataSet();
       ds = (DataSet)Session["ds"];
       //user表的列建立主键约束对象uc,约束名为u1,约束内存user表的id列
       UniqueConstraint uc = new UniqueConstraint("u1", ds.Tables["user"].Columns["id"],true);
       ds.Tables["user"].Constraints.Add(uc);
       Session["ds"] = ds;
       Fill();
   }

   protected void addrows_Click(object sender, EventArgs e)   //一个名为addrows的按钮
   {
       //增加行数据
       DataSet ds = new DataSet();
       ds = (DataSet)Session["ds"];
       object[] add_dt1 = new object[3];
       add_dt1[0] = 1;
       add_dt1[1] = "天神";
       add_dt1[2] = 23;
       ds.Tables["user"].Rows.Add(add_dt1);
       Session["ds"] = ds;
       Fill();
   }
 
 protected void foreign_Click(object sender, EventArgs e)   //一个名为foreign的按钮
   {
       DataSet ds = new DataSet();
       ds = (DataSet)Session["ds"];
       //主(user)表从(blog)表之间建立外键关联对象fc,约束名为f1
       ForeignKeyConstraint fc = new ForeignKeyConstraint("f1", ds.Tables["user"].Columns["id"], ds.Tables["blog"].Columns["id"]);
       ds.Tables["blog"].Constraints.Add(fc);
       Session["ds"] = ds;
       Fill();
   }
 
 protected void Button1_Click(object sender, EventArgs e)  //提取表中值得按钮
    {
        //获取blog表的(1,2)值
        DataSet ds = new DataSet();
        ds = (DataSet)Session["ds"];
        Button1.Text = ds.Tables["blog"].Rows[0]["url"].ToString();
        Session["ds"] = ds;
        fill();
      
    }

    protected void Button2_Click(object sender, EventArgs e)  //修改表中值的按钮
   {
        DataSet ds = new DataSet();
        ds = (DataSet)Session["ds"];
        ds.Tables["user"].Rows[0]["name"] = " http://blog.sina.com.cn/tracymcgrady";
        Session["ds"] = ds;
        fill();
    }
 
【注意重点】设置任何一个函数,都需要在开头和结尾打上以下这段话:
        DataSet ds = new DataSet();
        ds = (DataSet)Session["ds"];
        ……(函数体部分)……
        Session["ds"] = ds;
        Fill();