可以将DataSet对象想象成位于内存内的的数据库。
DataSet对象必须配合DataAdapter对象使用,DataAdapter对象结构在Command对象之上,用来执行SQL命令,然后将结果置入DataSet对象;此外,DataAdapter对象也可以将DataSet对象改写过的数据写回数据源。
由于DataSet对象是使用“无连接传输模式”访问数据库,因此,在用户要求访问数据源时,无须经过冗长的连接操作,而且数据由数据源读入DataSet对象(内存)之后,便关闭数据连接,解除数据库的锁定,其他用户便可以再使用该数据库,用户之间无须争夺数据源。
DataSet对象包含3个子集:DataTableCollection(内含多个DataTable,相当于多个数据表。)
Tables[i)或Tables[“TableName”]、
DataColumnCollection(内含多个DataColumn,相当于表里的字段.)
Columns[i]或Columns[“ColumnName”]
DataRowCollections(内含多个DataRow,相当于表里的记录)
Row[i].ItemArray[j]
using System.Data;
using System.Data.OleDb;
public partial class NewFolder5_Default4 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//创建DataAdapter对象
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+Server.MapPath("DB.mdb");
OleDbDataAdapter adapter =new OleDbDataAdapter("select * from stu",conn);
//创建DataSet对象
DataSet ds = new DataSet();
adapter.Fill(ds,"stu");
//声明tab为DataTable对象,并将DataSet里的stu表赋值给它
DataTable tab = ds.Tables["stu"];
//显示stu表里的所有字段的名称
int i, j;
Response.Write("<table border='1'><tr align='center'>");
for (i = 0; i < tab.Columns.Count; i++)
Response.Write("<td>"+tab.Columns[i].Caption+"</td>");
Response.Write("</tr>");
//显示stu表里的所有数据行的内容
for (i = 0; i < tab.Rows.Count; i++)
{
Response.Write("<tr>");
for (j = 0; j < tab.Columns.Count;j++ )
Response.Write("<td>" + tab.Rows[i].ItemArray[j]+"</td>");
//tab.Rows[i].ItemArray[j]相当于tab.Rows[i][j]
Response.Write("</tr>");
}
Response.Write("</table>");
}
}
由于DataSet以Xml为核心,所以无论哪种数据源,这要置入DataSet对象中,一定是以XML格式来保存。