开源代码:基于数据集的数据库操作通用类(支持所有数据库且内置分页功能)
所以眼界还比较狭窄,不知道这个类有没有硬伤
比如在概念上就存在严重问题什么的。
呵呵,请大家给点意见和评论,让我学点东西,谢谢。我会来结贴的。^_^
using System;
using System.Data;
using System.Data.Common;
using System.Web.UI.WebControls;
namespace Liuzewei
{
// 类名:基于数据集的数据库操作通用类(支持所有数据库且内置分页功能)
//
// 作者:刘泽围
//
// 版权:在中国软件业不存在版权,可以随意使用 ^_^
//
// 版本:
//
// 2007年4月15日 内置了分页功能、将数据集与源数据之间的数据操作实现改为工厂模式
// 特别致谢 CSDN 论坛会员 sp1234(假装热心灌水实则灌水搞垮论坛)
//
// 2007年4月14日 对 用数据集操作源数据库 时的种种不确定与迷茫迫使我动手写了这么
// 个类并贴到了 CSDN 论坛,谢谢所有回复了帖子与给予我点拨的朋友们
//
// 说明:
//
// 本类将对源数据库的 查询、修改、删除、新增、更新与绑定操作抽象为统一的对数
// 据行引用 的操作
//
// 本类内置分页功能,而且本类是非静态类,所以使用时无须考虑多次不同数据库操作
// ,彼此之间产生的影响
//
// 本类内部采用工厂模式实现,使本类支持 .NET 支持的所有数据库,同时你还可以很
// 简单的针对你常用的数据库类型从本类相应派生出一个新类以方便你的使用
//
// 本类仅仅是对 .NET FCL 的一个简单包装,但在逻辑层次上本人还是经过仔细考虑的
// 比如说将所有操作抽象为统一操作时有考虑过尽量不损失原有的功能、性能与灵活性
// 总之,使用本类简单方便灵活,同时可以减小项目期的复杂度
//
// 示例:
//
// 以Access数据库为例,如果同时要操作多个不同类型的数据库,只要对应实例化即可
//
// 1、实例化对象,必须有主键
// DataBase dataBase( "SELECT [ip], [date], [id] FROM [sitestat]",
// "Provider=Microsoft.JET.OLEDB.4.0; Data Source = C:\SiteStat.mdb",
// "System.Data.OleDb" );
//
// 2、查询数据行,得到结果数据行的引用
// DataRow[] dataRows = dataBase.Select( "id > 10" );
//
// 3、显示数据行,dataRows来自于查询数据行时返回的引用
// for ( int i = 0; i < dataRows.Length; i++ )
// Response.Write( dataRows[i]["ip"].ToString() );
//
// 4、修改数据行并更新到源数据库,dataRows来自于查询数据行时返回的引用
// dataRows[2]["ip"] = "127.0.0.1";
// dataBase.Update();
//
// 5、删除数据行并更新到源数据库,dataRows来自于查询数据行时返回的引用
// for ( int i = 0; i < dataRows.Length; i++ )
// dataRows[i].Delete();
// dataBase.Update();
//
// 6、插入新数据行并更新到源数据库
// DataRow[] newDataRows = dataBase.NewDataRows( 2 );
// newDataRows[0]["ip"] = "127.0.0.2";
// newDataRows[1]["ip"] = "127.0.0.3";
// dataBase.Update();
//
// 7、由其他控件或数据对象进行绑定,这里以 Repeater 进行分页绑定为例
// int totalPage; // 绑定数据集中的第2页,每页10行数据,并返回总页数
// repeater.DataSource = dataBase.DataView( 10, 1, out totalPage );
// repeater.Bind();
//
// 8、针对特定数据库派生新类,这里以 Access 数据库为例
// public class OleDataBase : DataBase {
// public OleDataBase( string queryString, string dataBasePath )
// : base( queryString, "Provider=Microsoft.JET.OLEDB.4.0;
// Data Source = "+dataBasePath, "System.Data.OleDb" ){}}
// 这里仅调用了基类构造函数以简化操作,当然你可以做得更多
// 使用时除了实例化时参数不同以外,其他操作完全同基类对象
// OleDataBase oleDataBase = new OleDataBase( "SE...", "C:\S....mdb );
public class DataBase
{
#region 受保护成员
// 本类实例映射自给定源数据库的公用数据集
protected DataSet dataSet = new DataSet();
// 源数据库与数据集之间的数据适配器
protected DbDataAdapter dataAdapter;
protected DbCommandBuilder commandBuilder;
#endregion
#region 构造函数
// 在托管堆上分配内存实例化类本身以及 DataSet,DataAdapter,CommandBuilder 对象
public DataBase( string commandText, string connectionString,
string providerInvariantName )
{
DbProviderFactory providerFactory =
DbProviderFactories.GetFactory( providerInvariantName );
DbConnection connection = providerFactory.CreateConnection();
connection.ConnectionString = connectionString;
DbCommand command = providerFactory.CreateCommand();
command.CommandText = commandText;
command.Connection = connection;
dataAdapter = providerFactory.CreateDataAdapter();
dataAdapter.SelectCommand = command;
commandBuilder = providerFactory.CreateCommandBuilder();
commandBuilder.QuotePrefix = "[";
commandBuilder.QuoteSuffix = "]";
commandBuilder.DataAdapter = dataAdapter;
dataAdapter.Fill( dataSet );
}
#endregion
#region 公有方法
// 将本类实例公用数据集中数据更新到源数据库中
public void Update()
{
dataAdapter.Update( dataSet );
return;
}
// 从本类实例公用数据集中查询现有数据行
// 调用者可以对返回数据行引用进行显示、修改和删除操作
// 操作完毕调用 Updata() 将操作更新到源数据库中
public DataRow[] Select( string expression )
{
DataRow[] dataRows;
dataRows = dataSet.Tables[0].Select( expression );
return dataRows;
}
// 从本类实例公用数据集中开辟新数据行
// 调用者可以对返回数据行引用进行填充、修改和删除操作
// 操作完毕调用 Updata() 将操作更新到源数据库中
public DataRow[] NewDataRows( int lenth )
{
DataRow[] dataRows = new DataRow[lenth];
for ( int i = 0; i < lenth; i++ )
{
dataRows[i] = dataSet.Tables[0].NewRow();
dataSet.Tables[0].Rows.Add( dataRows[i] );
}
return dataRows;
}
// 返回 DataView 用于调用者绑定本类实例公用数据集进行显示
public DataView DataView()
{
return dataSet.Tables[0].DefaultView;
}
// 返回 DataView 用于调用者绑定本类实例公用数据集的某一分页进行显示
public DataView DataView( int pageSize, int currentPage, out int totalPage )
{
int totalRows = dataSet.Tables[0].Rows.Count;
totalPage = (totalRows / pageSize) + ((totalRows % pageSize == 0) ? 0 : 1);
DataSet pagedDataSet = new DataSet();
dataAdapter.Fill( pagedDataSet, currentPage * pageSize, pageSize, "pagedTable" );
return pagedDataSet.Tables["pagedTable"].DefaultView;
}
#endregion
}
}
相关推荐
Pager-taglib页面分页功能实战演练
在信息爆炸的时代,用户在Web页面上面对大量数据时,需要一种有效的方式来进行浏览与检索。分页功能应运而生,它将数据集分散到多个页面,使用户能够逐步查看和操作数据。对于Java Web开发者来说,实现分页功能是满足用户需求的必备技能之一。分页功能的设计既包括前端的交互界面,又涉及后端数据处理的逻辑。理想的分页系统应当简单直观,既能迅速响应用户的分页请求,又能优雅地处理大量数据的查询与显示。在用户体验、系统性能和开发效率之间寻求平衡,是设计分页功能时必须考虑的核心要素。
Java分页技术实现详解
本文还有配套的精品资源,点击获取 简介:Java分页是处理大数据集时提高性能和用户体验的关键技术。本文将深入解析在Java中实现分页的不同方法,包括JDBC分页、MyBatis分页、自定义工具类分页,以及使用现成的开源库和jar包。通过具体的代码示例和库文件,为读者提供从基础到高级的分页技术实现指南。 1. 分页概念及其重要性 1.1 分页的基础概念 ...
【雷达信号处理】数字下变频(DDC)(Matlab代码实现)
内容概要:本文介绍了基于MATLAB的雷达信号处理中数字下变频(DDC)技术的实现方法,重点阐述了DDC在雷达接收机前端信号处理中的关键作用。通过将高频回波信号下变频至基带,便于后续进行数字化处理与目标信息提取。文中提供了完整的MATLAB代码实现,涵盖混频、低通滤波、抽取等核心步骤,帮助读者理解DDC的工作原理与工程实现细节。; 适合人群:具备一定信号与系统、数字信号处理基础知识,从事雷达、通信或电子工程相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于教学演示,加深对数字下变频原理的理解;②作为雷达或通信系统仿真项目的基础模块;③辅助科研人员快速搭建信号处理链路,进行算法验证与性能分析。; 阅读建议:建议结合数字信号处理教材中的混频、奈奎斯特采样及多速率信号处理理论进行学习,动手运行并调试代码,尝试调整参数(如本振频率、滤波器阶数、抽取因子)以观察对输出信号的影响,从而深入掌握DDC的设计要点与实际应用。
福建省福州新区矢量面数据-02坐标-geojson格式.json
福州新区区划面数据,geojson格式,02坐标
量化数据笔记第2篇:外盘期货历史高频tick数据涵盖主流交易所的活跃合约,以逐笔成交记录为主 字段通常包含品种代码、交易所、日期、精确到毫秒的时间戳、成交价格、成交量、持仓量变化,以及盘口买卖一档挂单
量化数据笔记第2篇:外盘期货历史高频tick数据涵盖主流交易所的活跃合约,以逐笔成交记录为主。字段通常包含品种代码、交易所、日期、精确到毫秒的时间戳、成交价格、成交量、持仓量变化,以及盘口买卖一档挂单价与挂单量。数据保留了原始行情序列,反映微观价格变动与流动性瞬时变化。 数据源:CMES金融数据库


