let it be
行到水穷处 坐看云起时
  接着发一些自己写的东西,都是间断性的,希望对大家有帮助!


在创建了
DataSet对象以后,下面的事情就是向DataSet数据集中填充数据。目前最常用的数据填充方式是和数据库结合起来使用的,使用DataAdapter对象填充DataSet。在本节中会介绍到这种方式,另外还会介绍其他两种方式。

详细讲解

1. 把数据库中的数据通过DataAdapter对象填充DataSet

这种是在数据库程序开发过程中最常用到的数据填充方式。使用这种方式主要用到DataAdapter对象的FillFillSchema两种方法来对数据集进行填充。下面开始详细讲解如何将数据从数据库加载到DataSet中。

DataAdapter填充DataSet的过程分为二步:首先通过DataAdapterSelectCommand属性从数据库中检索出需要的数据。SelectCommand其实是一个Command对象。然后再通过DataAdapterFill方法把检索来的数据填充DataSet步骤操作如下:

1). 启动Visual Studio.NET

2). Visual C#.NET中新建一个“ASP.NET网站”项目。Visual Studio .NET会自动创建一个名称为:Default.aspx的页面。

3). Default.aspx.cs代码界面中确保网页引用System System.Data 这两个命名空间,这两个命名空间在创建的时候是默认存在的。

4). 除了SystemSystem.Data这两个命名空间,还需要System.Data.SqlClient命名空间。可以使用using语句来引用这个命名空间。这样做得好处是,在后面的代码中就不需要在这些命名空间中限定声明了。实现代码如下所示:

//引用命名空间

using System;

using System.Data;

using System.Data.SqlClient;

5). 既然要从数据库中获取数据,那么第一步就是建立数据库连接,这需要一个SqlCommand对象和一个连接字符串。下面代码中的连接字符串连接着位于本地计算机(运行这些代码的计算机)上的 SQL Server 服务器。您必须根据环境相应地修改该连接字符串。创建 SqlConnection 对象后,请调用该对象的 Open 方法以建立实际的数据库链接。实现代码如下所示:

string sConnectionString; //声明一个字符串

//连接数据库字符串

sConnectionString = " Data Source=.;Initial Catalog=Northwind;User ID=sa; ";

//创建SqlConnection数据库连接对象

SqlConnection Conn = new SqlConnection(sConnectionString);

//打开Conn

Conn.Open();

6). 接下来需要创建一个DataAdapter对象,它表示数据库和DataSet对象之间的链接。它的作用就相当于在数据库和DataSet对象建立一座桥梁供数据通过。 您可以将 SQL 或另一类型的用于检索数据的命令指定为 DataAdapter 的构造函数对象的一部分。下面的示例使用了一个 SQL 语句从Northwind数据库的Customers表检索记录。实现代码如下所示:

SqlDataAdapter Customer = new SqlDataAdapter("Select * From Customers", Conn);

7). 必须声明并创建 DataSet 对象的一个实例,此时您应为整个 DataSet 提供一个名称,然后才能开始加载任何数据。该名称可包含若干独立的表。实现代码如下所示:

DataSet ds = new DataSet();

8). SqlDataAdapter类中提供了两种数据集填充方法。一种是Fill方法,另一种是 FillSchema方法。这两种方法均可将信息加载到DataSet中。不同的是Fill方法加载数据本身,而FillSchema方法加载有关特定表的所有可用的元数据(如列名、主键和约束)。处理数据加载的正确方式是先运行FillSchema,后运行Fill实现代码如下所示:

Customer.FillSchema(ds,SchemaType.Source,"Customers"); Customer.Fill(ds,"Customers");

其实在很多时候只使用Fill也能实现数据填充功能,则只能加载描述列名和数据类型所需要的基本元数据。Fill方法不能加载主键信息,不过这种方法已经可以满足日常软件开发的需要了。实现代码如下所示:

Customer.Fill(ds,"Customers");

9). 这些数据此时作为DataSetTables集合内独立的DataTable对象来提供。如果您在对FillSchemaFill的调用中指定了一个表名,则可以使用该名称访问您需要的特定表。

DataTable tblCustomers; //创建一个DataTable数据表

//将这个创建的数据表

tblCustomers = ds.Tables["Customers"];

10). 下面使用Foreach循环把DataTable中的“CompanyName”列依次通过探出对话框显示出来。实现代码如下所示:

//以行为基准做循环

foreach (DataRow drCurrent in tblCustomers.Rows)

{

//在弹出对话框的形式显示出来CompanyName烈的数据信息

Response.Write("<script>alert('" + drCurrent["CompanyName"].ToString() + "')</script>");

}

11). 保存项目。这样就完成了一个简单的数据集填充操作。

下面给给出全部代码

string sConnectionString; //声明一个字符串

//连接数据库字符串

sConnectionString = " Data Source=.;Initial Catalog=Northwind;User ID=sa; ";

//创建SqlConnection数据库连接对象

SqlConnection Conn = new SqlConnection(sConnectionString);

//打开Conn

Conn.Open();

SqlDataAdapter Customer = new SqlDataAdapter("Select * From Customers", Conn);

DataSet ds = new DataSet();

//填充数据集

Customer.Fill(ds, "Customers");

DataTable tblCustomers; //创建一个DataTable数据表

//将这个创建的数据表

tblCustomers = ds.Tables["Customers"];

//以行为基准做循环

foreach (DataRow drCurrent in tblCustomers.Rows)

{

//在弹出对话框的形式显示出来CompanyName烈的数据信息

    Response.Write("<script>alert('" + drCurrent["CompanyName"].ToString() + "')</script>");

}

运行效果

如果把上面代码写在建立的Web程序中,运行后点击“Button”按钮,就会得出初始值为0的步长为1的一系列数,结果如9.5所示的显示结果。

 

9.5 本例运行效果

2. 通过DataAdapter对象操作DataSet实现更新数据库

很多时候通过DataSet完成了用户数据的操作,但是这时候的数据已经被修改了。这些修改的数据要求重新写入到数据库中,那么这时候怎么办呢?传统的思维方式是:把这些数据重新写回到数据库中对应的表里面。但是现在的DataSet是与数据库断开的,所以在这个时候就会遇到怎么用DataSet来更新数据库的问题。

其实在ADO.NET2.0通过DataAdapter对象操作DataSet实现更新数据库。DataAdapter是通过其Update方法实现以DataSet中数据来更新数据库的。当DataSet实例中包含数据发生更改后,此时调用Update方法,DataAdapter 将分析已作出的更改并执行相应的命令(INSERTUPDATE DELETE),并以此命令来更新数据库中的数据。如果DataSet中的DataTable是映射到单个数据库表或从单个数据库表生成,则可以利用 CommandBuilder对象自动生成DataAdapterDeleteCommandInsertCommand UpdateCommand。使用DataAdapter对象操作DataSet实现更新数据库具体的实现方法,下面代码可实现删除Customers数据表前5行数据。实现代码如下所示:

string sConnectionString; //声明一个字符串

//连接数据库字符串

sConnectionString = " Data Source=.;Initial Catalog=Northwind;User ID=sa; ";

//创建SqlConnection数据库连接对象

SqlConnection Conn = new SqlConnection(sConnectionString);

//打开Conn

Conn.Open();

//创建并初始化SqlCommand对象

SqlDataAdapter Customer = new SqlDataAdapter("Select * From Customers", Conn);

DataSet ds = new DataSet();

//使用SqlDataAdapterFill方法填充DataSet

Customer.Fill(ds, "Customers");

DataTable tblCustomers; //创建一个DataTable数据表

//将这个创建的数据表

tblCustomers = ds.Tables["Customers"];

//关闭数据连接

Conn.Close ( ) ;

//删除数据表中前5行数据

for (int i = 0; i < 5; ++i)

{

ds.Tables["Customers"].Rows[i].Delete ( ) ;

}

//删除DataSet中删除数据表Customers中第一行数据

ds.Tables["Customers"].AcceptChanges ( ) ;

 

由于不了解DataSet结构和与数据库关系,很多初学者往往只是更新了DataSet中的数据,就认为数据库中的数据也随之更新,所以当打开数据库浏览时发现并没有更新数据,都会比较疑惑,通过上面的介绍,疑惑应当能够消除了。

3. XML数据流或文本加载到DataSet

由于ADO.NET2.0中增强了与XML文件的结合,所以在这个时候DataSet中的数据可以从XML数据流或文档创建。加载XML数据流和文档到DataSet中是可使用DataSet对象的ReadXml方法。该ReadXml方法读取 XML 流或文档的内容并将数据加载到 DataSet 中。根据所指定的XmlReadMode和关系架构是否已存在,它还将创建DataSet的关系架构。 实现代码如下所示:

DataSet ds= new DataSet("xmlds");

ds.ReadXml("c:\\databases.xml");

posted on 2007-07-08 07:46  流浪浪  阅读(10927)  评论(2编辑  收藏  举报