1.1数据集
􀂊 是一种代表关系数据的内存驻留结构
􀂊 是以XML 形式表示的数据视图,是一种数据
关系视图。
􀂊 在Visual Studio 和.NET Framework 中,
XML 是存储和传输各种数据时所用的格式。因
此,数据集与XML 有密切关系。
1.2数据集分类
– 类型化数据集
– 非类型化数据集
1.3类型化数据集和非类型化数据集的区别
需要通过不能感知
Tables集
合引用列
非类型化数据集没有相应
的内置架构。与类型化数
据集一样,非类型化数据
集也包含表、列等,但它
们只作为集合公开。
非类型
化数据

在VS.NET中
可以智能感知
元素的类型
可以直接
通过名称
引用表和

类型化数据集这样一种数据集,
它先从基DataSet 类派生,然后
使用XML 架构文件(.xsd 文件)
中的信息生成新类。架构中的信
息(表、列等)被作为一组第一
类对象和属性生成并编译为此新
数据集类。
类型化
数据集
结构体系功能类型检测
• Relations:定义数据表之间的关系,该集合中可
以包含0个或者多个数据关系对象,每个对象表示
两个表之间的关系
• 只有数据集的EnforeConstraints属性设置为true
时,DataRelation中建立的约束才会被强制执行
• 为数据表添加数据关系(非类型数据集)

2.5 为数据表添加行
• Rows属性
• Rows.Add方法
– Add(DataRow):向数据表中添加指定的数
据行

显示行状态
• 数据行的RowState属性反映了自数据表创
建以来或者上次更新后在数据表上采取的
操作
• DataRowState的取值
• 显示状态行
private void btnCreate_Click(object sender, System.EventArgs e)
        {
            DataSet dsUntyped = new DataSet("myDS");//创建数据集
            DataTable dtMaster = new DataTable("Master");//创建数据表
            DataTable dtChild = new DataTable("Child");
            dsUntyped.Tables.Add(dtMaster);//把数据表添加到数据集中
            dsUntyped.Tables.Add(dtChild);
            Session["ds"] = dsUntyped;
           
        }

        private void btnAddColumn_Click(object sender, System.EventArgs e)
        {
            DataSet dsUntyped = (DataSet)Session["ds"];
            dsUntyped.Tables["Master"].Columns.Add("MasterID",typeof(int));
            dsUntyped.Tables["Master"].Columns.Add("MasterValue",typeof(string));
            dsUntyped.Tables["Child"].Columns.Add("MasterLink",typeof(int));
            dsUntyped.Tables["Child"].Columns.Add("ChildID",typeof(int));
            dsUntyped.Tables["Child"].Columns .Add("ChildValue",typeof(string));
            //修改表头
            dsUntyped.Tables["Master"].Columns["MasterID"].Caption = "主ID";
            dsUntyped.Tables["Master"].Columns["MasterValue"].Caption = "值";
            Session["ds"] = dsUntyped;
            Bind();
        }

        private void btnAddRow_Click(object sender, System.EventArgs e)
        {
            try
            {
                DataSet dsUntyped = (DataSet)Session["ds"];
                //为Master表添加两行
                DataRow dr = dsUntyped.Tables["Master"].NewRow();
                dr["MasterID"] = 1;
                dr["MasterValue"] = "One";
                dsUntyped.Tables["Master"].Rows.Add(dr);
                dr = dsUntyped.Tables["Master"].NewRow();
                dr["MasterID"] = 2;
                dr["MasterValue"] = "Two";
                dsUntyped.Tables["Master"].Rows.Add(dr);
                //为child表添加1行
                dr = dsUntyped.Tables["Child"].NewRow();
                dr["MasterLink"] = 1;
                dr["ChildID"] = 1;
                dr["ChildValue"] = "ChildOne";
                dsUntyped.Tables["Child"].Rows.Add(dr);
                Session["ds"] = dsUntyped;
                Bind();
            }
            catch(Exception ee)
            {
                Response.Write(ee.Message);
            }
       
        }
        //添加唯一键
        private void Button1_Click(object sender, System.EventArgs e)
        {
            DataSet dsUntyped = (DataSet)Session["ds"];
            System.Data.UniqueConstraint uc = new UniqueConstraint("unqi",dsUntyped.Tables["Master"].Columns["MasterID"]);
            dsUntyped.Tables["Master"].Constraints.Add(uc);
            Session["ds"] = dsUntyped;
        }
        private void Bind()
        {
            DataSet dsUntyped = (DataSet)Session["ds"];
            dgMaster.DataSource = dsUntyped.Tables["Master"].DefaultView;
            dgChild.DataSource = dsUntyped.Tables["Child"].DefaultView;
            this.DataBind();
        }

        private void btnAddForeign_Click(object sender, System.EventArgs e)
        {
            DataSet dsUntyped = (DataSet)Session["ds"];
            System.Data.ForeignKeyConstraint fc = new ForeignKeyConstraint("fc",dsUntyped.Tables["Master"].Columns["MasterID"],dsUntyped.Tables["Child"].Columns["MasterLink"]);
            dsUntyped.Tables["Child"].Constraints.Add(fc);
            Session["ds"] = dsUntyped;

        }
private void btnQuery_Click(object sender, System.EventArgs e)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(Server.MapPath(".\\db\\dbGuest.xml"));
            lbEmail.Text = doc.SelectSingleNode("//User[Name='"+ddlName.SelectedItem.Text+"']").ChildNodes.Item(2).InnerText;
        
        }

        private void btnChange_Click(object sender, System.EventArgs e)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(Server.MapPath(".\\db\\dbGuest.xml"));
            XmlNodeList nodeList=xmlDoc.SelectSingleNode("dbGuest").ChildNodes;//获取dbGuest节点的所有子节点
            foreach(XmlNode xn in nodeList)//遍历所有子节点
            {
                XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型
           
                XmlNodeList node = xe.GetElementsByTagName("Name");
                if(node.Count>0)
                {

                    if(node[0].InnerText==ddlName.SelectedItem.Text)
                    {
                        XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点
                        foreach(XmlNode xn1 in nls)//遍历
                        {
                            XmlElement xe2=(XmlElement)xn1;//转换类型
                            if(xe2.Name=="Email")//如果找到
                            {
                                xe2.InnerText=tbNewMail.Text;//则修改
                                break;//找到退出来就可以了
                            }
                        }
                        break;
                    }
                }
               
            }
            xmlDoc.Save(Server.MapPath(".\\db\\dbGuest.xml"));
            Bind();
        }

        private void btnDelete_Click(object sender, System.EventArgs e)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(Server.MapPath(".\\db\\dbGuest.xml"));
            XmlNodeList xnl=xmlDoc.SelectSingleNode("dbGuest").ChildNodes;
 
            foreach(XmlNode xn in xnl)
            {
                XmlElement xe=(XmlElement)xn;
                XmlNodeList node = xe.GetElementsByTagName("Name");
                if(node.Count>0)
                {

                    if(node[0].InnerText==ddlName.SelectedItem.Text)
                        xe.RemoveAll();//删除该节点的全部内容
                    break;
                }
            }
           
            xmlDoc.Save(Server.MapPath(".\\db\\dbGuest.xml"));
            Bind();
        }

        private void btnAdd_Click(object sender, System.EventArgs e)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(Server.MapPath(".\\db\\dbGuest.xml"));
            XmlNode root=xmlDoc.SelectSingleNode("dbGuest");//查找<dbGuest>
            XmlElement xe1=xmlDoc.CreateElement("User");//创建一个<User>节点
            XmlElement xesub1=xmlDoc.CreateElement("Name");
            xesub1.InnerText="Guset";//设置文本节点
            xe1.AppendChild(xesub1);//添加到<User>节点中
            XmlElement xesub2=xmlDoc.CreateElement("City");
            xesub2.InnerText="上海";
            xe1.AppendChild(xesub2);
            XmlElement xesub3=xmlDoc.CreateElement("Email");
            xesub3.InnerText="ss@22.net";
            xe1.AppendChild(xesub3);
 
            root.AppendChild(xe1);//添加到<dbGuest>节点中
            xmlDoc.Save(Server.MapPath(".\\db\\dbGuest.xml"));
            Bind();
        }
    }


• ForeignKeyConstraints属性:保证两个数
据表之间对应行改变时的关系
• UniqueConstraints属性:保证某列数据在
每行都不相同
• 在运行时为数据表添加约束
– 添加外键约束:修改一个表的值看是否变化
– 添加唯一键约束
            dsUntyped.Tables["Child"].Columns.Add("MasterLink",typeof(int));
• 为数据表添加行3、数据操作
3.1数据集方法
– 克隆数据集:只复制结构
– 复制数据集:复制结构和数据
3.2数据表方法
– Select方法:用于在运行时过滤数据表的行
并进行排序。它不对表的内容作改动。该方
法只是返回与指定的规则相匹配的行数组
posted on 2006-05-30 09:14  公木子  阅读(622)  评论(0)    收藏  举报