您的位置:首页 > 其它

深入了解DataSet

2006-08-07 00:39 204 查看


DataSet的使用
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 btnUpdateMID_Click(object sender, System.EventArgs e)
{
DataSet dsUntyped = (DataSet)Session["ds"];
dsUntyped.Tables["Master"].Rows[0]["MasterID"] = 4;
Bind();
}
private void Button2_Click(object sender, System.EventArgs e)
{
DataSet dsUntyped = (DataSet)Session["ds"];
int nIndexTb = int.Parse(ddlTable.SelectedItem.Value);
int nIndexRow = int.Parse(tbRow.Text);
int nIndexCol = int.Parse(tbCol.Text);
object obj = dsUntyped.Tables[nIndexTb].Rows[nIndexRow][nIndexCol];
tbResult.Text = obj.ToString();
}
private void btnUpdateDs_Click(object sender, System.EventArgs e)
{
DataSet dsUntyped = (DataSet)Session["ds"];
int nIndexTb = int.Parse(ddlTable.SelectedItem.Value);
int nIndexRow = int.Parse(tbRow.Text);
int nIndexCol = int.Parse(tbCol.Text);
dsUntyped.Tables[nIndexTb].Rows[nIndexRow][nIndexCol] = tbResult.Text;
Session["ds"] = dsUntyped;
Bind();
}

XSD设计演练
using System.Xml;
using System.Xml.Schema;
using System.IO;
private void btnGen_Click(object sender, System.EventArgs e)
{
XmlSchema sch = new XmlSchema();
//添加<element name="Book">
XmlSchemaElement elem = new XmlSchemaElement();
sch.Items.Add(elem);
elem.Name = "Book";
//添加复杂yuans
XmlSchemaComplexType cType = new XmlSchemaComplexType();
elem.SchemaType = cType;
XmlSchemaSequence seq = new XmlSchemaSequence();
cType.Particle = seq;
XmlSchemaElement eleTitle = new XmlSchemaElement();
eleTitle.Name = "Title";
eleTitle.SchemaTypeName = new XmlQualifiedName("string",
"http://www.w3.org/2001/XMLSchema");
XmlSchemaElement elePub = new XmlSchemaElement();
elePub.Name = "Publisher";
elePub.SchemaTypeName = new XmlQualifiedName("string",
"http://www.w3.org/2001/XMLSchema");
seq.Items.Add(eleTitle);
seq.Items.Add(elePub);
//由于是编程生成添加节点,要进行验证
sch.Compile(new ValidationEventHandler(ValidationHandler));
StreamWriter sw = new StreamWriter(Server.MapPath("out.xsd"));
sch.Write(sw.BaseStream);
}
public void ValidationHandler(object sender,ValidationEventArgs args)
{
Response.Write("架构验证失败:");
Response.Write(args.Message);
}





定义DataSet架构
private void Button1_Click(object sender, System.EventArgs e)
{
DataSet ds1;
//使用DataSet API
ds1 = new DataSet();
ds1.Tables.Add("Customers");
ds1.Tables[0].Columns.Add("custid",typeof(int));
ds1.Tables[0].Columns.Add("custname",typeof(string));
ds1.Tables.Add("Orders");
ds1.Tables[1].Columns.Add("custid",typeof(int));
ds1.Tables[1].Columns.Add("orderid",typeof(int));
ds1.Relations.Add(ds1.Tables["Customers"].Columns["custid"],ds1.Tables["Orders"].Columns["custid"]);
dgShow1.DataSource = ds1.Tables[0].DefaultView;
dgShow1.DataBind();
dgShow2.DataSource = ds1.Tables[1].DefaultView;
dgShow2.DataBind();
ds1.WriteXmlSchema(Server.MapPath("out.xsd"));
}
private void Button2_Click(object sender, System.EventArgs e)
{
DataSet ds2;
//使用Schema From SQLServer
ds2 = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(
"Select * from customers;Select * from Orders",
"server=(local);uid=sa;pwd=111;database=northwind");
da.FillSchema(ds2,SchemaType.Source);
ds2.Tables[0].TableName = "Customers";
ds2.Tables[1].TableName = "Orders";
ds2.Relations.Add(ds2.Tables["Customers"].Columns["customerid"],
ds2.Tables["Orders"].Columns["customerid"]);
dgShow1.DataSource = ds2.Tables["Customers"].DefaultView;
dgShow1.DataBind();
dgShow2.DataSource = ds2.Tables["Orders"].DefaultView;
dgShow2.DataBind();
}
private void Button3_Click(object sender, System.EventArgs e)
{
DataSet ds3;
//从文件中读取
ds3 = new DataSet();
ds3.ReadXmlSchema(Server.MapPath("customer.xsd"));
dgShow1.DataSource = ds3.Tables[0].DefaultView;
dgShow1.DataBind();
}
private void Button4_Click(object sender, System.EventArgs e)
{
DataSet ds4;
//使用InforXmlSchema
ds4 = new DataSet();
ds4.InferXmlSchema(Server.MapPath("customer.xml"),null);
dgShow1.DataSource = ds4.Tables[0].DefaultView;
dgShow1.DataBind();
}



DataSet模式推断
using System.Text;
using System.IO;
private void btnInfo_Click(object sender, System.EventArgs e)
{
string strFileName = SelectFile.PostedFile.FileName;
DataSet MyDS = new DataSet();
MyDS.ReadXml(strFileName );
foreach ( DataTable myTable in MyDS.Tables )
{
Response.Write("Table: " +myTable.TableName +"<br>");
foreach ( DataColumn myColumn in myTable.Columns )
{
Response.Write( " "+myColumn.ColumnName +"<br>");
}
}
Response.Write("Relations:<br>");
foreach ( DataRelation myRelation in MyDS.Relations )
{
Response.Write(" "+ myRelation.RelationName+"<br>" );
}
MyDS.WriteXmlSchema(Server.MapPath("XMLOut.xsd"));
}

private void btnInf2_Click(object sender, System.EventArgs e)
{
string strFileName = File1.PostedFile.FileName;
DataSet MyDS = new DataSet();
MyDS.ReadXmlSchema(strFileName );
foreach ( DataTable myTable in MyDS.Tables )
{
Response.Write("Table: " +myTable.TableName +"<br>");
foreach ( DataColumn myColumn in myTable.Columns )
{
Response.Write( myColumn.ColumnName +"<br>");
}
}
Response.Write("Inferred Relations:<br>");
foreach ( DataRelation myRelation in MyDS.Relations )
{
Response.Write( myRelation.RelationName+"<br>" );
}
}



DataSet序列化
using System.IO;
using System.Text;
using System.Xml;
private void SerializeDataSet(string filename)
{
XmlSerializer ser = new XmlSerializer(typeof(DataSet));
// Create a DataSet; add a Table, coumn, and ten rows.
DataSet ds = new DataSet("myDataSet");
DataTable t = new DataTable("table1");
DataColumn c = new DataColumn("thing");
t.Columns.Add(c);
ds.Tables.Add(t);
DataRow r;
for(int i = 0; i<10;i++)
{
r = t.NewRow();
r[0] = "Thing " + i;
t.Rows.Add(r);
}
TextWriter writer = new StreamWriter(filename);
ser.Serialize(writer, ds);
writer.Close();
}
private void SerializeElement(string filename)
{
XmlSerializer ser = new XmlSerializer(typeof(XmlElement));
XmlElement myElement=
new XmlDocument().CreateElement("MyElement", "ns");
myElement.InnerText = "Hello World";
TextWriter writer = new StreamWriter(filename);
ser.Serialize(writer, myElement);
writer.Close();
}
private void SerializeNode(string filename)
{
XmlSerializer ser = new XmlSerializer(typeof(XmlNode));
XmlNode myNode= new XmlDocument().
CreateNode(XmlNodeType.Element, "MyNode", "ns");
myNode.InnerText = "Hello Node";
TextWriter writer = new StreamWriter(filename);
ser.Serialize(writer, myNode);
writer.Close();
}

private void btnDs_Click(object sender, System.EventArgs e)
{
SerializeDataSet(Server.MapPath("ds.xml"));
Show(Server.MapPath("ds.xml"));
}

private void btnEle_Click(object sender, System.EventArgs e)
{
SerializeElement(Server.MapPath("Elem.xml"));
Show(Server.MapPath("Elem.xml"));
}

private void btnNode_Click(object sender, System.EventArgs e)
{
SerializeNode(Server.MapPath("Node.xml"));
Show(Server.MapPath("Node.xml"));
}

private void Show(string strFile)
{
StreamReader sr = new StreamReader(strFile);
tbContent.Text = sr.ReadToEnd();
sr.Close();
}
private void btnUser_Click(object sender, System.EventArgs e)
{
Person p;
if(File.Exists(Server.MapPath("Person.xml")))
p = new Person(Server.MapPath("Person.xml"));
else
{
p = new Person("张三",20);
p.PersonSerializer(Server.MapPath("Person.xml"));
}
tbContent.Text = p.ToString();
}
}
public class Person
{
public string name;
public int age;
public Person(){}
public Person(string strName,int nAge)
{
name = strName;
age = nAge;
}
public Person(string strSerial)
{
Person p;
XmlSerializer se = new XmlSerializer(typeof(Person));
StreamReader sr = new StreamReader(strSerial);
p = (Person)se.Deserialize(sr.BaseStream);
this.age = p.age;
this.name = p.name;
}
public override string ToString()
{
string s;
StringBuilder mysb = new StringBuilder();
StringWriter mysw = new StringWriter(mysb);
XmlSerializer se = new XmlSerializer(this.GetType());
se.Serialize(mysw,this);
s = mysw.ToString();
return s;
}
public void PersonSerializer(string strFileName)
{
StreamWriter sw = new StreamWriter(strFileName);
XmlSerializer se = new XmlSerializer(this.GetType());
se.Serialize(sw.BaseStream,this);
sw.Close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: