DataSet对象也称为数据集对象,DataSet对象用于表示那些储存在内存中的数据,它相当于一个内存中的数据库。它可以包括多个DataTable对象及DataView对象。DataSet主要用于管理存储在内存中的数据以及对数据的断开操作。
由于DataSet对象提供了一个离线的数据源,这样减轻了数据库以及网络的负担,在设计程序的时候可以将DataSet对象作为程序的数据源。
下面是一个利用Adapter对象填充数据到DataTable(或DataSet)并显示的例子,这个例子采用了页面和代码分离模式,前台代码如下:
01.<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DataAdapter.aspx.cs" Inherits="DataAdapter" %>
02.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "" >
04.<head runat="server">
05. <title>利用Adapter对象填充DataTable的例子</title>
06.</head>
07.<body>
08. <form id="form1" runat="server">
09. <div>
10. <table border="1" cellpadding="0" cellspacing="0">
11. <tr><td>编号</td><td>帐号</td><td>真实姓名</td><td>年龄</td><td>性别</td><td>手机</td><td>电话</td><td>电子邮件</td></tr>
12. <%
13. //在页面中调用后台代码,这样也能保证生成的代码不会位于<html></html>标记之外
14. ShowData();
15. %>
16. </table>
17. </div>
18. </form>
19.</body>
20.</html>
相应的后台代码:
01.using System;
02.using System.Data;
03.using System.Configuration;
04.using System.Collections;
05.using System.Web;
06.using System.Web.Security;
07.using System.Web.UI;
08.using System.Web.UI.WebControls;
09.using System.Web.UI.WebControls.WebParts;
10.using System.Web.UI.HtmlControls;
11.using System.Data.SqlClient;
12.public partial class DataAdapter : System.Web.UI.Page
13.{
14. protected void Page_Load(object sender, EventArgs e)
15. {
16. }
17. //供前台页面调用的方法,这个方法必须是protected或者public
18. protected void ShowData()
19. {
20. //实例化Connection对象
21. SqlConnection connection = new SqlConnection("Data Source=(local);Initial Catalog=AspNetStudy;Persist Security Info=True;User ID=sa;Password=sa");
22. //实例化Command对象
23. SqlCommand command = new SqlCommand("select * from UserInfo where sex=0", connection);
24. SqlDataAdapter adapter = new SqlDataAdapter(command);
25. /*
26. 下面的被注释掉的代码与上面的代码是等效的
27. SqlDataAdapter adapter = new SqlDataAdapter("select * from UserInfo where sex=0", connection);
28. */
29. DataTable data = new DataTable();
30. adapter.Fill(data);
31. /* 下面的被注释掉语句与上面填充DataTable的效果是一样的,我更倾向于没有注释掉的部分
32. DataSet ds = new DataSet();//实例化DataSet
33. adapter.Fill(ds, "UserInfo");//填充ds中的"UserInfo"表
34. DataTable data = ds.Tables["UserInfo"];
35. */
36. for (int i = 0; i < data.Rows.Count; i++)
37. {
38. Response.Write("<tr><td>" + data.Rows[i]["UserId"].ToString() + "</td>");
39. Response.Write("<td>" + data.Rows[i]["UserName"].ToString() + "</td>");
40. Response.Write("<td>" + data.Rows[i]["RealName"].ToString() + "</td>");
41. Response.Write("<td>" + data.Rows[i]["Age"].ToString() + "</td>");
42. //下面是按照列顺序直接读取值,并且根据值来判断最终显示结果
43. Response.Write("<td>" + (bool.Parse(data.Rows[i]["Sex"].ToString()) == true ? "男" : "女") + "</td>");
44. //根据列顺序读,列的值需要做相应转换
45. Response.Write("<td>" + data.Rows[i]["Mobile"].ToString() + "</td>");
46. //根据列名来读取,列的值需要做相应转换
47. Response.Write("<td>" + data.Rows[i]["Phone"].ToString() + "</td>");
48. Response.Write("<td>" + data.Rows[i]["Email"].ToString() + "</td></tr>/n");
49. }
50. }
51.}
上面的程序代码基本与使用DataReader对象的例子相同,不过这里查询的所有女性用户,效果如下: