Version 3.0
ADO.NET - I
第六章
2
回顾
? Web应用程序概念
? Application对象
? Session对象
? Server对象
3
目标
? 解释 DataSet
? 解释并使用,NET 数据提供程序
? 创建 DataGrid
? 探讨 DataReader
4
ADO.NET 中的数据连接
? 断开式连接的必要性
– 大部分数据库仅能同时维护少数连接
– 应用程序的性能取决于用户数量
– 对于 Web 应用程序而言,维护与数据库的持续
连接并不可行
5
ADO 对象模型
数据库
.NET 数据提供程序
CONNECTION
COMMAND
DATA ADAPTER
DATA READER
DataSet
DataTable
DataRow
DataColumn
UniqueConstraint
ForeignKeyConstraint
6
DataSet
DataSet
<Dataset name>.Tables.Add(<datatable object name>);
添加 DataTable 的语法
7
DataSet演示
8
.NET 数据提供程序
.NET 数据提供程序
建立与数据库的连接
检索和操纵数据库中的数据
9
Connection 对象
SQL,NET 数据提供程序 OLE DB,NET 数据提供程序
<%@ Import Namespace="System.Data"
%>
<%@ Import Namespace="System.Data"
%>
<%@ Import Namespace="System.Data,
SqlClient" %>
<%@Import
Namespace="System.Data.OleDb" %>
sqlcon = new SqlConnection ("server=SQLDB; uid=sa; pwd=password;
database=pubs");
adocon=new OleDbConnection("Provider=SQLOLEDB; Data
Source=SQLDB; Initial Catalog=pubs; User Id=sa; pwd=password");
10
Command 对象 4-1
SqlCommand sqlcom = new SqlCommand("select * from employee",
sqlcon);
OleDbCommand adocom = new OleDbCommand("select * from
employee",adocon);
检索数据
11
Command 对象 4-2
OleDbCommand inscom = new OleDbCommand("insert into
employee values ('ARD25437A','John','P','Baxter',7,
100,0877,'1989-11-11T00:00:00 ')",adocon);
插入数据
SqlCommand inscom = new SqlCommand("insert into
employee values ('ARD25437A','John','P','Baxter',7,
100,0877,'1989-11-11T00:00:00 ')",sqlcon);
12
Command 对象 4-3
OleDbCommand mycommand = new
OleDbCommand("UPDATE employee SET job_id=11
WHERE fname='Pedro'",adocon);
更新数据
SqlCommand mycommand = new
SqlCommand("UPDATE employee SET job_id=11
WHERE fname='Pedro'",sqlcon);
13
OleDbCommand delcom = new OleDbCommand("delete from
employee WHERE fname='Lesley'",adocon);
删除数据
SqlCommand delcom = new SqlCommand("delete from
employee WHERE fname='Lesley'",sqlcon);
Command 对象 4-4
14
Command 对象 4-5
连接和执行命令
delcom.Connection.Open();
delcom.ExecuteNonQuery();
delcom.Connection.Close();
15
DataAdapter
? 数据适配器是 ADO.NET 托管提供程序的组
成部分
? 适配器用于在数据源和数据集之间交换数据
? 数据适配器可以在任意源和数据集之间移动
数据
16
使用 DataAdapter填充数据集
? DataAdapter 的 SelectCommand 属性是一个
Command 对象,它从数据源中检索数据
? DataAdapter 的 Fill 方法用于使用 DataAdapter
的 SelectCommand 的结果来填充 DataSet
17
使用 DataAdapter操作数据库
? DataAdapter 的 Update 方法可调用来将
DataSet 中的更改解析回数据源
? DataAdapter 的 InsertCommand、
UpdateCommand 和 DeleteCommand 属性也是
Command 对象
? DataAdapter 将使用 InsertCommand、
UpdateCommand 或 DeleteCommand 来处理该
更改
18
DataGrid演示
dgMyGrid.DataSource=myds.Tables["employee"].DefaultView;
dgMyGrid.DataBind();
19
DataView演示
? 使用 DataView 能够创建 DataTable 中所存储
的数据的不同视图
? DataView作用
– 可以公开表中具有不同排序顺序的数据
– 可以按行状态或基于筛选器表达式来筛选数据
实例
DataView mydv = new DataView (myds.Tables ["employee"]);
mydv.RowFilter = "job_lvl >180";
mydv.Sort = "fname ASC";
dgMyGrid.DataSource=mydv;
dgMyGrid.DataBind();}
20
DataReader演示
? 可以使用 DataReader 从数据库中检索只读、
只进的数据流
? Command.ExecuteReader 从数据源中检索行
? 使用 DataReader 对象的 Read 方法可从查询
结果中获取行
? 返回行的每一列值的方法
– 通过向 DataReader 传递列的名称或序号引用
– 调用 GetDateTime,GetDouble,GetGuid,GetInt32
等方法
21
处理 XML 数据
FileStream myfs = new FileStream(Server.MapPath("xmldatagrid.xml"),
FileMode.Open,FileAccess.Read);
StreamReader myreader = new StreamReader(myfs);
DataSet myds = new DataSet();
myds.ReadXml(myreader);
DataView mySource = new DataView(myds.Tables[0]);
DataGrid.DataSource = mySource;
dgMyGrid.DataBind();
<rootelement xmlns="x-schema:scheduledSchema.xsl">架构
1
2
3
4
打开 XML 文件
附加 Streamreader
从 Streamreader 读取 XML 数据
将 XML 数据绑定至 DataSet
22
DataGrid 中的 XML 数据演示
23
ADO.NET 的优点
24
ADO 和 ADO.NET 相比较
ADO ADO.NET
数据以 Recordset 的形式存储 数据以 Dataset 的形式存储
Recordset 中的数据来自多个表,集
中和显示在一个表中
DataSet 将其中的每个表存储为一个
称为 DataTable 对象的单独实体
在表中进行顺序处理 控制权可以从表的一行转到另一行
便于提供对数据库的连接访问 提供对数据库的断续访问
数据类型必须先被转换为 COM 数据
类型,然后才能在层或组件之间传

DataSet 以 XML 格式进行传输
25
总结
? ADO.NET 两个核心组件
– DataSet
–,NET 数据提供程序
? DataSet
? DataGrid 控件
? DataView
? DataReader