【ACCESS精品源码栏目提醒】:网学会员为需要ACCESS精品源码的朋友们搜集整理了ASPX高性能分页 - 软件工程相关资料,希望对各位网友有所帮助!
ASP.NET强类型 DataSet、ObjectDataSource、GridView、FormView 快速实现数据分页展示、 添加、修改和删除ASP.NET 为我们提供了功能非常强大的数据访问、展示、操作的控件合对象,比如 GridView、FormView 控件,配合强类型的 DataSet 和 ObjectDataSource 控件,我们可以很快速的以 N 层结构来管理开发我们的数据。
本文主要讲解如何结合上述对象高效快速的开发我们的 Web 数据应用程序, 关于它们的具体示例和说明请参考 MSDN 上相应文档:使用强类型(类型化的)DataSet使用 ASP.NET 2.0 ObjectDataSource 控件GridView 类参考FormView 控件参考下面按步骤说明,在
Access 数据库中运用上述控件,如有问题请回复。
一,创建解决方案 DataAccessingSample 以及 DataAccessingSample 数据库如下图所示创建 Web 应用程序:在 App_Data 文件夹下创建
Access 数据库 DataAccessingSample.mdb;此数据库包含一个表Notes,即留言表,其结构如下:二,添加强类型的 DataSetDataSet 数据集是数据表 DataTable 的集合,而强类型的 DataSet 即是继承自 DataTable 的强类型的 DataTable 的集合。
在 VS 中添加强类型 DataSet 后,会自动的生成强类型的数据表DataTable 以及 Adaptor 用于添加删除数据等,可以直接供 ObjectDataSource 使用。
在 Web 应用程序项目下,添加文件夹 DAL,即数据访问层。
在 DAL 下添加 DataSet 名称为NotesData:打开此数据集,在工具箱中拖拽 TableAdaptor,当项目无数据库连接时,会提示创建数据库连接:点击查询生成器,生成查询:最终如下:单击下一步完成。
自此我们的强类型数据集创建完毕了:查看 NotesData.Designer.cs 可以看到 VS 以及自动帮我们生成强类型的数据表,一些相关事件以及 TableAdaptor,并且给相应的方法标注了 DataObjectMethodAttribute,我们可以直接在ObjectDataSource 中使用。
三,在 Defaultaspx 中添加 ObjectDataSource,GridView,FormView 控件在页面中添加 ObjectDataSource 控件命名为 ObjectDataSourceNotes,并配置数据源(配置之前请记得生成下项目):定义数据方法,一般情况下,VS 会自动设置 TableAdaptor 中的对应方法:点击完成,即可查看到生成的控件标记如下:从工具箱中拖拽 GridView 控件,设置其样式和数据源为刚添加的 ObjectDataSource:此控件的标记代码如下: 还没有留言。
生成项目打开页面,可以看到如下效果,目前尚无记录:为了方便添加记录,我们在页面中拖拽一个按钮,以及一个 FormView 控件(数据源亦为ObjectDataSourceNotes),单击此按钮则显示 FormView,FormView 默认为添加模式,添加完毕后隐藏 FormView。
这两个控件标记如下: NoteID: NoteTitle: NoteContent: AddDateTime: NoteUser: nbsp Add/Modify/View Note NoteTitle: NoteContent: AddDateTime: NoteUser: nbsp NoteID: NoteTitle: NoteContent: AddDateTime: NoteUser: nbsp nbspCode-Behind 代码如下:using Systemusing System.Collections.Genericusing System.Webusing System.Web.UIusing System.Web.UI.WebControlsnamespace DataAccessingSample public partial class _Default : System.Web.UI.Page protected void Page_Loadobject sender EventArgs e protected void ButtonAddNote_Clickobject sender EventArgs e this.FormViewNotes.Visible true protected void InsertCancelButton_Clickobject sender EventArgs e this.FormViewNotes.Visible false protected void FormViewNotes_ItemInsertedobject senderFormViewInsertedEventArgs e this.FormViewNotes.Visible false 最终页面运行如下,点击 AddNote 按钮,添加一些测试记录:至此,我们的程序就完成了,不过细心的朋友可能会发现,在更新、删除的时候会出现一些无法删除的情况,至于为什么会出现这样的情况,可以仔细去查看生成的 TableAdaptor 类。
在 DataSet 中添加一个 DeleteNote 的方法,这个删除方法只传递一个删除的 NoteID 参数,重新设置 ObjectDataSource 即可:ObjectDataSource 的属性设置为 OldValuesParameterFormatString0而非OldValuesParameterFormatStringOriginal_0,为什么要这么做,大家可以思考下,因为我自己添加的删除方法的时候只有一个参数,否则就会找不到对应的方法了。
同理这样修改后,对于更新方法 Update 也需要自己手动的添加,否则也会出现类似下面的错误:ObjectDataSource“ObjectDataSourceNotes”未能找到带参数的非泛型方法“Update”:NoteTitle NoteContent AddDateTime NoteUser Original_NoteID Original_NoteTitleOriginal_AddDateTime Original_NoteUser NoteID。
至于为什么 VS 自动生成的方法对于本文的
Access 数据库不适用了,可以详情参考自动生成的代码。
经过这样修改后,在页面测试删除成功(第二条已经删除掉):ASP.NET强类型 DataSet ObjectDataSource GridView
Access 数据库 百万级数据实现高性能分页在我的上一篇博文中,我讲解了主题ASP.NET强类型 DataSet、ObjectDataSource、GridView、FormView快速实现数据分页展示、添加、修改和删除 。
本文将继续上一篇博文,讲述如何在 GridView 中实现高性能的分页;之所以会提出这样的问题,是因为在上一篇文章中的 ObjectDataSource强类型 DataSetGridView,无论页面每一页显示多少条数据,数据表中的所有数据都会加载到内存中,如果数据达到百万级、千万级以上,这样的分页的性能我们可想而知。
在 SQL Server 中我们可以借助于 Row_Number over order by NoteID desc 来实现分页存储过程,并与ObjectDataSource 以及强类型 DataSet 结合,实现高性能的分页,这样可以保证,每次仅查询出一页数据,而不会占用太多的内存。
之前看到一些朋友提到 GridView 中的分页是鸡肋,其实不然,我们可以自定义分页提高性能。
关于 GridView 高性能分页,ASP.NET 官方网站上已有一篇比较好的实例文章(SQL Server 数据库):Efficiently Paging Through Large Amounts of Data,为了帮助大家更方便的理解,我结合之前的例子,在
Access 数据库实现高性能的分页。
一,
Access 分页查询语句在
Access 数据库中没有存储过程的支持,因此我们没有办法按照 SQL Server 的方式来进行分页查询,一般情况使用下面的句式:SELECT TOP 页大小 FROM 表WHERE ID NOT IN SELECT TOP 页大小页数-1 id FROM 表 ORDER BY idORDER BY ID二,在强类型的 DataSet 中添加 ObjectDataSource 分页需要的 SelectCountMethod 属性需要的方法在 NotesData 中添加一个查询: 单击下一步-完成创建,即可看到我们新的查询: 按照上面步骤添加查询:我们暂且设置 SQL 为:点击下一步-完成创建。
四,修改在
Access 数据库中分页查询的方法由于
Access 数据库在一些方面使用不如 SQL Server 那样强大,因此这里需要我们自己进行改造,我们对自动生成的 NotesTableAdapter 类的方法 GetNotesPaged 进行重载,我们查看其源代码为:global::System.Diagnostics.DebuggerNonUserCodeAttribute global::System.CodeDom.Compiler.GeneratedCodeAttributeSystem.Data.Design.TypedDataSetGenerator 4.0.0.0 global::System.ComponentModel.Design.HelpKeywordAttributevs.data.TableAdapter global::System.ComponentModel.DataObjectMethodAttributeglobal::System.ComponentModel.DataObjectMethodType.Select false public virtual NotesData.NotesDataTable GetNotesPaged this.Adapter.SelectCommand this.CommandCollection2 NotesData.NotesDataTable dataTable new NotesData.NotesDataTable this.Adapter.FilldataTable return dataTable 在 DAL 下新加类 NotesTableAdapter 的 partial class,代码如下:using Systemusing System.Collections.Genericusing System.Webnamespace DataAccessingSample.DAL.NotesDataTableAdapters public partial class NotesTableAdapter /// /// 分页查询数据的方法,其参数分别对应 ObjectDataSource 的分页相关属性 /// /// /// /// global::System.ComponentModel.DataObjectMethodAttributeglobal::System.ComponentModel.DataObjectMethodType.Select false public virtual NotesData.NotesDataTable GetNotesPagedint startRowIndex int maximumRows this.Adapter.SelectCommand this.CommandCollection2 this.Adapter.SelectCommand.CommandText string.FormatSELECT TOP 0 NoteIDNoteTitle NoteContent AddDateTime NoteUserFROM NotesWHERE NoteID maximumRows this.Adapter.SelectCommand.Parameters.Clear this.Adapter.SelectCommand.Parameters.AddNoteIDSystem.Data.OleDb.OleDbType.Integer.Value startRowIndex1 NotesData.NotesDataTable dataTable new NotesData.NotesDataTable this.Adapter.FilldataTable return dataTable 五,重新设置 ObjectDataSource生成解决方案,然后配置 ObjectDataSource,更改其 Select 方法,并且设置其 SelectCountMethod 属性:设置其属性:修改控件的标记内容,将修改之所以删除参数是因为这两个跟分页相关的参数不需要在这里设置,否则获取方法时会出错。
页面运行效果如下:可见我们的分页效果已经达到了
上一篇:
ActiveMQ(中文)参考手册
下一篇:
致享和威驰哪个好点?冲着安全和空间 推荐致享