正 文

简介用ADO.NET DataSet访问数据


www.7dspace.com  更新日期:2005-11-27 3:44:31  七度空间


访问数据

填充好DataSet后,访问数据是再简单不过的一件事情。记住DataSet中的每个表都表示成一个DataTable对象,它是通过 DataSet的Tables集合来公开的。每个DataTable又包含一个由DataRow构成的集合,可对其进行索引,以获得特定行的数据。下面对上例进行扩展,假定你要将Customers表第一行、第一列的内容打印到控制台,可使用以下代码:

Console.WriteLine(ds.Tables[0].Rows[0][0]);

还可传递某个列的字符串索引,从而根据名称来获取不同的列。假定Customers表的第一列名为CustomerID,那么以下代码不仅能很好地工作,还更容易理解:

Console.WriteLine(ds.Tables[0].Rows[0][“CustomerID”]);

为使代码更清晰,甚至能从Rows集合提取一个DataRow,并直接访问它:

DataRow dr = ds.Tables[0].Rows[0];

    Console.WriteLine(dr["CustomerID"]);

操作多个表

前面一直没有提及DataSet的一个非常有用的特性:它可表示来自多个表的数据。你可能已经注意到,以上代码是首先索引一个Tables集合,再访问其中的一个数据行。事实上,你可采取这种方式来访问多个DataTable,要么按索引,要么按名称。

要用多个DataTable来填充一个DataSet,可使用多个DataAdapter:

SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM Customers;",cn);

SqlDataAdapter sda2 = new SqlDataAdapter(“SELECT * FROM Products;”,cn);

DataSet ds = new DataSet();

sda.Fill(ds);

sda2.Fill(ds);

来自Customers的数据在ds.Tables集合的第一个DataTable中使用,Products数据则成为第二项。还可按名称来引用这些表。ADO.NET自动为每个DataTable指派常规名称。本例的Customers被命名为Table,Products被命名为 Table1。调用Fill方法时,可强行指定一个名称来覆盖这些默认名称,例如:

sda.Fill(ds,”Customers”);

sda2.Fill(ds,”Products”);

虽可使用多个DataAdapter,但效率堪忧,因为每个Fill方法都要连接一次数据库。如果你的数据库提供程序支持,就可只使用一个适配器,并用一个批处理查询来装载数据:

 SqlDataAdapter sda = new SqlDataAdapter(

“SELECT * FROM Customers;” +  “SELECT * FROM Products;”);

sda.Fill(ds);

然而,表的默认命名问题再度出现。为了一劳永逸地解决这个问题,可为适配器定义新的TableMapping属性:

    sda.TableMappings.add(“Table”,”Customers”);

    sda.TableMappings.add(“Table1”,”Products”);

冰山之一角

DataSet是微软ADO.NET数据访问API的核心,提供了许多强大的功能。本文只介绍了作为DataSet对象一部分提供的少许功能。在以后的文章里,我会更多地探讨这方面的主题。

2页,页码:[1] [2] 

上一篇:为漂亮美眉照片添加卡通效果天使翅膀
下一篇:从ASP.NET中发送电邮通知
作者:周靖 译  来源:开发者在线 ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐