DataSet实例之建立数据表和主外键约束

简介:
【学习笔记】
申明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();




本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/201802,如需转载请自行联系原作者

目录
相关文章
|
7月前
|
关系型数据库 数据库 RDS
如果源数据库和目标数据库中都存在sequence的column且在迁移过程中没有新增的话
如果源数据库和目标数据库中都存在sequence的column且在迁移过程中没有新增的话
58 1
|
6月前
|
关系型数据库 PostgreSQL
postgresql如何将没有关联关系的两张表的字段合并
【6月更文挑战第2天】postgresql如何将没有关联关系的两张表的字段合并
158 3
|
SQL 存储 分布式计算
mc表在迁移导出的时候 事务表导出之后然后在导入的时候会变成非事务表,这个有办法解决么?建的时候时事务表,导出是用dw的迁移导出做的
mc表在迁移导出的时候 事务表导出之后然后在导入的时候会变成非事务表,这个有办法解决么?建的时候时事务表,导出是用dw的迁移导出做的
48 1
|
7月前
|
数据库
数据库第二次作业 表的约束
数据库第二次作业 表的约束
37 0
|
7月前
|
SQL 前端开发 关系型数据库
MYSQL基础之【创建数据表,删除数据表】
MYSQL基础之【创建数据表,删除数据表】
65 0
|
存储 SQL 关系型数据库
|
存储 SQL 关系型数据库
MySQL数据库的创建(表的创建,列,表的增删改,深入浅出)
存储数据是处理数据的第一步 。只有正确地把数据存储起来,我们才能进行有效的处理和分析。否则,只能是一团乱麻,无从下手。那么,怎样才能把用户各种经营相关的、纷繁复杂的数据,有序、高效地存储起来呢? 在 MySQL 中,一个完整的数据存储过程总共有 4 步,分别是创建数据库、确认字段、创建数据表、插入数据。
MySQL数据库的创建(表的创建,列,表的增删改,深入浅出)
|
存储 SQL 数据库
DM8数据库批量创建表,插入数据,更改表信息,删除测试
在测试产品的功能和性能的时候需要大量数据表,我们可以通过**游标**和**存储过程**批量创建测试表,插入测试数据,更改测试表,删除测试表。
|
SQL 数据库 数据库管理
数据库和数据表 建立索引的原则
索引查询是数据库中重要的记录查询方法,要不要进入索引以及在那些字段上建立索引都要和实际数据库系统的查询要求结合来考虑,下面给出实际中的一些通用的原则:
|
存储 监控 Oracle
Oracle数据库实例、用户、表、表空间之间关系
数据库:   Oracle数据库是数据的物理存储。这就包括(数据文件ORA或者DBF、控制文件、联机日志、参数文件)。   其实Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是Oracle就只有一个大数据库。
2166 0