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方法:用于在运行时过滤数据表的行
并进行排序。它不对表的内容作改动。该方
法只是返回与指定的规则相匹配的行数组
是一种代表关系数据的内存驻留结构
是以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方法:用于在运行时过滤数据表的行
并进行排序。它不对表的内容作改动。该方
法只是返回与指定的规则相匹配的行数组
浙公网安备 33010602011771号