使用DataAdapter读取数据
通过任务四学习,你需要掌握和了解以下内容:
1.掌握DataAdapter对象及使用
2.学会商品分类添加页面的制作
3.学会分类导航的制作
【任务要点】
DataAdapter对象及使用
【案例一】完成商品分类添加页面的制作
在YiZeShopTest应用程序中,新建一个用于添加商品分类的Web窗体。
实例运行效果如下所示。

AddCategory(类别添加页)
【具体步骤】
(1)在网站YiZeShopTest中建立一个名为AddCategory.aspx的Web窗体。
(2)在窗体中输入说明文字,添加一个TextBox控件更改其ID为txtCategory,添加Button控件更改其ID为btnAdd。
(3)双击按钮控件,在自动生成的btnAdd_Click()事件中添加代码。

这里使用了DataAdapter对象的InsertCommand属性向数据表中插入数据。InsertCommand属性与ExecuteNonQuery方法结合使用,完成了数据的插入。DataAdapter对象的UpdateCommand和DeleteCommand属性与此属性使用方法相同。

在默认情况下,当Connection对象执行Open方法时,DataAdapter对象将自动调用SelectCommand属性。但对于InsertCommand、UpdateCommand和DeleteCommand这三个属性则必须使用ExecuteNonQuery方法调用。

另一种方式的参考
【案例二】完成商品分类导航窗体的制作
YiZeShopTest应用程序中,商品是该网站的主要内容,如果想方便准确地找到所需的商品,应该按商品的分类查找,下面所制作的就是显示商品分类列表的页面。该页面显示商品分类的链接,点击链接可转到显示该分类下的商品信息。
实例运行效果如下图所示:

【具体步骤】
(1)在网站YiZeShopTest中建立一个名为CategoryList.aspx的窗体。
(2)在窗体中新建一个两行一列的表格,并将DataList控件从工具箱中拖到这个表格的第二行第一列中。该DataList的属性设置见下表。

(3)CategoryList.aspx.cs中添加如下引用:using System.Data.SqlClient;
(4)当窗体加载的时候检索数据,并实现数据绑定。

在C#中对Datatable排序,【DefaultView的Sort方法】 代码如下:
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("UserName", typeof(string));
dt.Rows.Add(new object[] { 1, "张飞" });
dt.Rows.Add(new object[] { 2,"关羽"});
DataView dv = dt.DefaultView;
dv.Sort = "ID";
dt = dv.ToTable();
ds.Tables[0]返回的是一个DataTable对象
ds.Tables[0].DefaultView返回的是这个DataTable的默认DataView对象
也可参考以下方法
(5)在HTML代码中添加如下相关代码
设计模式下界面如图所示。


两列呈现


两列呈现
将该页设为起始页,启动项目。首先执行的是CategoryList.aspx.cs中的Page_Load()中的代码。
SqlDataAdapter对象的Fill方法利用数据源中的数据填充或刷新DataSet,并填充DataSet中的表,"Category"为数据集中表的名称。最后将DataSet设置为DataList的数据源,并调用该表格的DataBind()方法。当调用该方法时,DataList控件将遍历这个DataSet,并为它所包含的每个记录向表中添加一个栏目名称。
使用DataBind.Eval绑定dlstCateList的模板列表。
ASP.NET框架提供了一种静态方法,计算后期绑定的数据绑定表达式并且可选择将结果格式化为字符串。DataBind.Eval很方便,因为它消除了开发人员为强迫将值转换为所学的数据类型而必须做的很多显式转换。这在数据绑定模板列表内的空间时尤为有用,因为通常数据行和数据字段的类型都必须转换。
DataBind.Eval只是一个具有三个参数的方法:数据项的命名容器、数据字段名和格式字符串。Page是另一个可与DataBind.Eval一起使用的命名容器。<%#DataBinder.Eval(Container.DataItem, "IntergerValue", "{0:c}")%>格式字符串参数是可选的。如果省略它,则DataBinder.Eval返回对象类型的值,如下所示<%#(bool)DataBinder.Eval(Container.DataItem,"BoolValue")%>
【背景知识】
DataAdapter对象及使用
DataAdapter对象主要是在Connection对象和DataSet对象之间执行数据传输的工作,这个对象架构在Command对象上。DataReader通过Command对象对数据源执行SQL命令,将数据填充到DataSet对象,以及把DataSet对象中的数据更新返回到数据源中。
1.DataAdapter对象的常用方法
(1)Update:根据保存在DataSet中的数据来更新数据源中的数据。
(2)Fill:利用数据源中的数据填充或刷新DataSet,其返回值是加载到DataSet中的行数量。Fill方法使用DataAdapter对象的SelectCommand的结果来填充DataSet。具体是通过使用DataReader对象来隐式地返回用于在DataSet中创建的表的列名称及类型(表和列仅在不存在时创建,否则使用现有的DataSet架构),并填充DataSet中的表。
2.DataAdapter对象的常用属性
(1)SelectCommand:从数据源中检索数据。
(2)InsertCommand:向数据源中插入新的数据。
(3)DeleteCommand:从数据源中删除数据。
(4)UpdateCommand:更新数据源中的数据。
3.DataAdapter对象的构造函数与创建
DataAdapter对象的创建是由其对应的构造函数完成的,但是,不同的数据提供者用不同的类及其构造函数完成DataAdapter对象的创建,在SQL Server数据提供者中用类SqlDataAdapter的构造函数创建DataAdapter对象,而在OLE DB数据提供者中用类OleDbDataAdapter的构造函数创建DataAdapter对象。下表分别列出这两个类的四种构造函数的原型。


