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,如需转载请自行联系原作者

目录
相关文章
|
6天前
|
存储 SQL 数据处理
什么是数据库表的索引和主索引
什么是数据库表的索引和主索引
18 2
|
6天前
|
存储 关系型数据库 MySQL
{MySQL} 数据库约束& 表的关系& 新增&&删除& 修改& 查询
{MySQL} 数据库约束& 表的关系& 新增&&删除& 修改& 查询
22 0
|
9月前
数据库里的表字段含有‘-’的修改
数据库里的表字段含有‘-’的修改
|
6天前
|
SQL 数据处理 定位技术
数据库基础(二):数据库表创建、修改、复制、删除与表数据处理
数据库基础(二):数据库表创建、修改、复制、删除与表数据处理
130 2
|
6月前
|
Oracle 关系型数据库 MySQL
根据一张表更新另一张表
根据一张表更新另一张表
|
11月前
|
存储 SQL 关系型数据库
|
SQL 数据库
数据库实验一:数据库与数据表定义(2)—— 数据表相关操作
使用T-SQL命令方法创建自定义数据类型myName2为Nvarchar(20),不允许为空;自定义数据类型myDept为char(50),允许为空。(提示:CREATE TYPE…FROM命令)
283 0
数据库实验一:数据库与数据表定义(2)—— 数据表相关操作
|
存储 SQL Java
Mysql数据库表字段设计优化(状态列)
初始状态码(java int 32 long 64),int 可以表示31种(除去0000),long可以表示63种(除去0000),当然不可能将0000赋值给初始状态,一般来讲,选择int还是long是根据具体业务需求来决定的。
407 0
Mysql数据库表字段设计优化(状态列)
|
存储 SQL 关系型数据库
MySQL数据库的创建(表的创建,列,表的增删改,深入浅出)
存储数据是处理数据的第一步 。只有正确地把数据存储起来,我们才能进行有效的处理和分析。否则,只能是一团乱麻,无从下手。那么,怎样才能把用户各种经营相关的、纷繁复杂的数据,有序、高效地存储起来呢? 在 MySQL 中,一个完整的数据存储过程总共有 4 步,分别是创建数据库、确认字段、创建数据表、插入数据。
MySQL数据库的创建(表的创建,列,表的增删改,深入浅出)
|
存储 SQL 数据库
DM8数据库批量创建表,插入数据,更改表信息,删除测试
在测试产品的功能和性能的时候需要大量数据表,我们可以通过**游标**和**存储过程**批量创建测试表,插入测试数据,更改测试表,删除测试表。