在ASP.NET 2.0中操作数据之四十六:使用SqlDataSource控件检索数
测试该页面时,GridView调用其数据源控件的Select()方法。如果我们使用ObjectDataSource控件来测试该页面的话,它将会调用逻辑层ProductsBLL class的GetProducts() 方法。而用SqlDataSource控件的话,其Select()方法将直接链接到要访问的数据库,并传递SelectCommand(具体就本例而言,传递的是SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products])。SqlDataSource将返回的结果传递给GridView,后者根据从数据库返回的每一条记录生产一行(a row) SqlDataSource控件及数据Web控件的内置属性 一般来说,数据Web控件的分页,排序,编辑,插入,删除等属性是由数据Web控件自身指定的,跟它所使用的数据源控件没有太大关系。也就是说,GridView可以自由的启用它内建的分页,排序,编辑和删除功能,而不管它到底是绑定到SqlDataSource控件还是ObjectDataSource控件。然而,数据Web控件的某些属性却要受其绑定的数据源控件及其设置的影响。 比如, 就像我们在Efficiently Paging Through Large Amounts of Data 这章教程中探讨的那样,在启用分页功能后,在默认情况下,每次跳转页面时,数据Web控件都会对所有的记录重新检索,尽管我们只需要显示特定的那几条记录。这种模式在要检索的数据量很大的情况下,效率会很低。不过ObjectDataSource控件可以通过自定义分页的方法仅仅返回那些需要在当前页面上显示的记录,很遗憾的是SqlDataSource控件不支持自定义分页功能。 在默认情况下,SqlDataSource控件返回的数据可以通过GridView控件来进行分页和排序。来做个示范,在Querying.aspx 页面中,在GridView控件的智能标签里启用分页和排序功能,看它是否象我们期望的那样工作。 分页和排序的原理在于SqlDataSource控件将检索的数据库数据转换成“泛型数据集”(loosely-typed DataSet)。那些被用来分页的每条记录就蕴含 在数据集里面,此外,数据集支持对返回的结果进行排序。当GridView请求对数据分页或排序时,SqlDataSource控件自动完成上述工作。 在默认情况下,SqlDataSource返回的是数据集(DataSet),你也可以使它返回一个DataReader ,方法是把它的DataSourceMode属性设置为“DataReader”。当希望把DataReader的检索结果转换为现成的代码(existing code )时,设置为DataReader往往是首选。另外DataReader比起DataSet来简单的多,功能更强大。不过将DataSourceMode属性设置为“DataReader”后,数据Web控件便不能启用分页或排序功能,因为SqlDataSource无法得知总共返回了多少条记录,并且DataReader也不支持对返回的数据排序。 第四步:使用自定义的SQL查询或存储过程 前面讲到,SqlDataSource控件从数据库检索数据的方法有2种。在第二步我们探讨了从表Products返回数据的方法,现在我们探讨用自定义SQL查询的情况。 在Querying.aspx添加一个新的GridView控件,在其智能标签的下拉列表中选择“新建数据源”,在“选择数据源类型”界面中选“database”,将数据源ID设置为“ProductsWithCategoryInfoDataSource”。
下一步,接着会询问使用哪个数据连接,就想我们在图7做的那样,在下拉列表中选择NORTHWINDConnectionString,点下一步,在配置SQL语句界面中,选择“指定自定义SQL语句或存储过程”,点下一步,进入“定义自定义语句或存储过程”界面,包含“选择”,“更新”,“删除”,“插入”四个选项卡,在每个选项卡中,你可以在文本框中输入自定义SQL语句,或者在下拉列表中选择存储过程。本章我们讨论输入自定义SQL语句,在下面的教程中再探讨使用存储过程的情况。
可以手工输入自定义SQL语句,也可以借助于查询生成器来辅助生成。不管用哪种,都应使用如下查询: SELECT Products.ProductID, Products.ProductName, Categories.CategoryName FROM Categories INNER JOIN Products ON Categories.CategoryID = Products.CategoryID
点下一步进入“测试查询”界面,点“完成”结束设置。完成设置后,GridView的代码应该看起来象下面这样: <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID" DataSourceID="ProductsWithCategoryInfoDataSource" EnableViewState="False"> <Columns> <asp:BoundField DataField="ProductID" HeaderText="ProductID" InsertVisible="False" ReadOnly="True" SortExpression="ProductID" /> <asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" /> <asp:BoundField DataField="CategoryName" HeaderText="CategoryName" SortExpression="CategoryName" /> </Columns> </asp:GridView> <asp:SqlDataSource ID="ProductsWithCategoryInfoDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>" SelectCommand=" SELECT Products.ProductID, Products.ProductName, Categories.CategoryName FROM Categories INNER JOIN Products ON Categories.CategoryID = Products.CategoryID"> </asp:SqlDataSource> (编辑:淮北站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |