//添加唯一键
protected 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;
}
//添加外键
protected 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;
}
通过代码写xsd架构
protected 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);
}
四种获得dataset架构的方法
protected 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"));
}
protected 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=;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();
}
protected 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();
}
protected 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();
}
序列化与反序列化
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();
}