DataSet.xsd使用的问题 在使用DataSet.xsd时,怎么创建关联查询,而且其结果集就不只是一张表这回事儿了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 关联查询你就需要把相关的表里的字段全都在.xsd里定义好这样才可以fill否则达不到你的效果。 算是关连查询,其实也是差多表,一个表一个表的查吧,顶多三个表关连查询。比较懒,不想写数据底层的访问,特别是类似Petshop一类的结构写起来累死了。 XSD可以建立关系或者把所有涉及的字段,放到一个新的table上面 DataSet 是ADO.Net中相当重要的数据访问模型。有一个很大的优点是可以记录多个表之间的关系。有点类似与数据库的外键。这样一来,给我们数据查询带来很大方便。可以先用Access来预览一下建立关系的好处,在Access07中,两个有关系的表之间可以方便的引用,如图 父表 Materials 和 子表 NKnumbers 之间有外键约束,是一对多的关系,打开父表 Materials,左边会显示一个加号,点击加号就会显示出子表中与这个记录相关联的行。 在DataSet中也可以定义类似的关系。DataSet有一个属性Relation,是DataRelation对象的集合,要创建新的关系,可以使用Relation的Add()方法。下面以NorthWind为例,说明这个过程:using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.SqlClient;namespace DataSetRelationStudy{ class Program { static void Main(string[] args) { SqlConnection conn = new SqlConnection(@"Data Source=(local);Initial Catalog=Northwind;Integrated Security=True"); //生成一个DataSet用来接受从数据库来的表,DataSet本身可以看做一个“内存中的数据库” DataSet myDs = new DataSet(); //用两个数据适配器访问数据库 SqlDataAdapter custAdapter = new SqlDataAdapter("SELECT * FROM Customers", conn); SqlDataAdapter orderAdapter = new SqlDataAdapter("SELECT * FROM Orders", conn); //将取得的数据存入DataSet中两个表 custAdapter.Fill(myDs, "Customers"); orderAdapter.Fill(myDs, "Orders"); //在Customers表和Orders之间定义关系,实现“一对多”关系 //其中Customers 是 父表,是一对多中的“一” //Orders 是子表,是一对多中的 “多” //关系定义的方法是 DataRelation 变量名 = “DataSet对象”.Relations.Add("关系名",DataSet对象.主表.列名 , DataSet对象.子表.列名); //这样便在两张表之间建立了一对多关系,相当于“外键” //利用关系可以方便的在两表之间导航 DataRelation custOrderRelation = myDs.Relations.Add("CustOrders", myDs.Tables["Customers"].Columns["CustomerID"], myDs.Tables["Orders"].Columns["CustomerID"]); foreach (DataRow custRow in myDs.Tables["Customers"].Rows)//利用关系来查找Customers表中每个人的订单 { Console.WriteLine(" Custeomer ID: "+custRow["CustomerID"]+" Name: "+custRow["CompanyName"]); //下面是关键,主表中的行可以用 行.GetChildRows(关系变量) 来取得子表中的相关行 //可以用 行.GetChildRows("关系名称") 调用,名称是存在DataSet的Relations属性中的名字 //返回的是一个DataRow的集合,可以遍历这个集合来取得所有的子项 //foreach(DataRow orderRow in custRow.GetChildRows(custOrderRelation)) foreach(DataRow orderRow in custRow.GetChildRows("CustOrders")) { Console.WriteLine(" Order ID: "+orderRow["OrderID"]); } } conn.Close(); Console.Read(); } }} iis问题啊 非常简单问题!明天结帖 速度! 怎么修改并保存编辑器里的内容啊 求高手指教 如何在前台的onbeforeunload调用后台的方法? 【初学者求教】ASP.NET中这样定义全局变量不行么? Discuz NT 2.0二次开发,对.cs修改为何不起作用? 谁有电子商务的原码给我学习学习可以吗 至少一个参数没有被指定值 循环打印求助 菜鸟求助! excel 怎么提高发邮件的速度?
这样才可以fill
否则达不到你的效果。
比较懒,不想写数据底层的访问,特别是类似Petshop一类的结构写起来累死了。
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;namespace DataSetRelationStudy
{
class Program
{
static void Main(string[] args)
{
SqlConnection conn = new SqlConnection(@"Data Source=(local);Initial Catalog=Northwind;Integrated Security=True"); //生成一个DataSet用来接受从数据库来的表,DataSet本身可以看做一个“内存中的数据库”
DataSet myDs = new DataSet(); //用两个数据适配器访问数据库
SqlDataAdapter custAdapter = new SqlDataAdapter("SELECT * FROM Customers", conn);
SqlDataAdapter orderAdapter = new SqlDataAdapter("SELECT * FROM Orders", conn); //将取得的数据存入DataSet中两个表
custAdapter.Fill(myDs, "Customers");
orderAdapter.Fill(myDs, "Orders"); //在Customers表和Orders之间定义关系,实现“一对多”关系
//其中Customers 是 父表,是一对多中的“一”
//Orders 是子表,是一对多中的 “多”
//关系定义的方法是 DataRelation 变量名 = “DataSet对象”.Relations.Add("关系名",DataSet对象.主表.列名 , DataSet对象.子表.列名);
//这样便在两张表之间建立了一对多关系,相当于“外键”
//利用关系可以方便的在两表之间导航
DataRelation custOrderRelation = myDs.Relations.Add("CustOrders",
myDs.Tables["Customers"].Columns["CustomerID"], myDs.Tables["Orders"].Columns["CustomerID"]); foreach (DataRow custRow in myDs.Tables["Customers"].Rows)//利用关系来查找Customers表中每个人的订单
{
Console.WriteLine(" Custeomer ID: "+custRow["CustomerID"]+" Name: "+custRow["CompanyName"]); //下面是关键,主表中的行可以用 行.GetChildRows(关系变量) 来取得子表中的相关行
//可以用 行.GetChildRows("关系名称") 调用,名称是存在DataSet的Relations属性中的名字
//返回的是一个DataRow的集合,可以遍历这个集合来取得所有的子项
//foreach(DataRow orderRow in custRow.GetChildRows(custOrderRelation))
foreach(DataRow orderRow in custRow.GetChildRows("CustOrders"))
{
Console.WriteLine(" Order ID: "+orderRow["OrderID"]);
}
} conn.Close();
Console.Read(); }
}
}