- 51Aspx源码必读.txt[8KB]
- DotNet.TransDbUtils.sln[8KB]
- DotNet.TransDbUtils.suo[210KB]
- from.gif[4KB]
- 最新Asp.Net源码下载.url[123B]
源码介绍
源码参数
一、更新记录
1、更新日期:2015-08-05 00:00:00
2、更新内容:
以下是本次更新内容:
1.修改命名空间为DotNet,更具通用性。
2.规范一些代码文件(夹)、方法名称。
3.将数据库事务放到BLL层使用,更利于复杂的业务逻辑编写,保证DAL层的职责简单性。
【为什么要在BLL层使用数据库事务?】
(1)由于某些业务逻辑较复杂,需要对数据库多表进行操作,为保证关联数据的完整性,需要使用数据库事务。
(2)为了实现应用系统(业务逻辑)一次编写即可支持多种数据库,需要使用工厂模式实现多数据库支持。
(3)一般情况,我们可以在DAL层使用数据库事务,但较多的业务逻辑放在DAL层,使得BLL层和DAL层职责不清,不利于统一在BLL层编写业务逻辑,也不利于在DAL层仅编写简单的数据操作;
(4)所以,在BLL层使用数据库事务是最优的解决方案。但我们面临一个问题:不同数据库的事务类型不一样,如SQLite数据库事务类型是SQLiteTransaction,SqlServer数据库事务类型是SqlTransaction,由于BLL层的代码应与数据库无关,就不应直接使用某种类型的数据库事务。★解决方法是使用IDbTransaction接口,从而支持在BLL层使用Sqlite和SqlServer等多种不同数据库事务。
本软件是一个工厂模式三层架构例子程序(★特点与难点是在BLL层使用数据库事务,而不在DAL层使用数据库事务)。程序通过WinForm应用程序实现Sql Server 2005,Sqlite 3的增、删、改、查,分页功能。是学习三层架构、工厂模式,操作Sql Server和Sqlite数据库的极佳学习例子。本源码是我开发一个10万行代码软件时使用的架构的进化升级版,使用此架构,可以开发复杂的(操作数据库)WinForm或WebForm程序,相信您在学习这个例子程序的时候,能学到很多项目开发经验,包括接口操作、文件组织、编码规范、多数据库、代码重用等等。
【为什么要在BLL层使用数据库事务?】
1.由于某些业务逻辑较复杂,需要对数据库多表进行操作,为保证关联数据的完整性,需要使用数据库事务。
2.为了实现应用系统(业务逻辑)一次编写即可支持多种数据库,需要使用工厂模式实现多数据库支持。
3.一般情况,我们可以在DAL层使用数据库事务,但较多的业务逻辑放在DAL层,使得BLL层和DAL层职责不清,不利于统一在BLL层编写业务逻辑,也不利于在DAL层仅编写简单的数据操作;
4.所以,在BLL层使用数据库事务是最优的解决方案。但我们面临一个问题:不同数据库的事务类型不一样,如SQLite数据库事务类型是SQLiteTransaction,SqlServer数据库事务类型是SqlTransaction,由于BLL层的代码应与数据库无关,就不应直接使用某种类型的数据库事务。★解决方法是使用IDbTransaction接口,从而支持在BLL层使用Sqlite和SqlServer等多种不同数据库事务。
二、功能介绍
1、提供跨线程安全访问控件示例。
2、提供将异常信息保存为txt文件功能。
3、提供程序只能运行1个实例,即不允许打开多个本程序的示例。
4、提供捕获未知异常功能,防止程序发生未捕获异常而崩溃。
5、提供窗体单列模式功能,即某窗体只能实例化1次,不能将某个窗体重复打开为多个窗体。
6、提供将BLL层实例静态化,即程序对BLL层进行一次实例化进行使用,不需要在每次使用时实例化。
7、提供线程锁功能,防止多线程同时访问一个文件冲突。
8、提供MD5、SHA1等加密算法,数组和泛型转换,中文拼音,生成随机字符串等常用方法。
9、提供数据库事务例子。
10、提供SQLiteHelper和SQLHelper使用例子程序,方便操作数据库。
11、★本源码另一个最大的优点:修改数据库结构更改极少代码,在实际项目开发中相当实用,从此不再为修改数据库结构而头疼了。示例:
// 普通的DAL层代码:修改数据库结构后,需要修改相应parameters代码,很麻烦,易出错。
public bool Update(Model.NT_User m)
{
string sql = "update User set UserName=@UserName where ID=@ID ";
SqlParameter[] param = {
new SqlParameter("@ID", SqlDbType.Int,4),
new SqlParameter("@UserName", SqlDbType.NVarChar,50)};
param[0].Value = m.ID;
param[1].Value = m.RoleName;
return SqlHelper.ExecuteNonQuery(sql, param) > 0;
}
//使用Utils类的DAL层代码:修改数据库结构后,只需修改fields(表的列名),其他代码不用变,很简单,不出错。
private static string tablename = "NT_User";//表名
private static string[] fields = "Id,UserName".Split(',');//表的列名
public bool Update(Model.NT_User m)
{
string sql = Utils.CreateUpdateSql(tablename, fields, true, " where ID=@ID");
SqlParameter[] param = Utils.CreateSqlParamsByInfo(m);
return SqlHelper.ExecuteNonQuery(sql, param) > 0;
}
三、注意事项
1、开发环境为Visual Studio 2010,使用.net 2.0 开发。
2、项目结构。解决方案WinForm.TransactionDbUtils包含10个项目,主要功能如下:
DUF.BLL:业务逻辑层,包含各种业务逻辑处理方法;
DUF.Common:公共方法层,包含各种公共方法,如字符串匹配等,其他各层均有可能使用其中的方法;
DUF.DALFactory:工厂接口层,定义了数据库访问的接口,DUF.DALSQLite层和DUF.DALSQLServer层实现了工厂接口层的所有方法,若使用其他数据库(如Oracle),则需要参考 DUF.DALSQLite层或DUF.DALSQLServer层再编写DUF.DALOracle层。本层主要用到了反射技术:根据类名生成其实例。
DUF.DALSQLite:SQLite数据库访问层,包含针对SQLite数据库的增、删、改、查,分页功能。
DUF.DUF.DALSQLServer:SQL Server数据库访问层,包含针对SQL Server数据库的增、删、改、查,分页功能。
DUF.Encrypt:本层是AES加解密字符串的例子程序,可用于数据库连接字符串的加解密。
DUF.Model:实体层,与数据库表及其字段一一对应。
DUF.Pager:分页控件层,实现了一个WinForm分页控件(支持多线程跨线程安全访问)。
DUF.UI:应用程序界面层,本软件的WinForm窗体,提供数据录入、展示、操作(修改、删除等)的界面。
DUF.XmlHelper:XML文件处理层,提供对XML的构建、解析、序列化、反序列化等操作。可用于配置文件的解析等。
以上10个项目的引用关系请查看各项目的引用(如A项目引用了B项目,C项目引用了D和E项目等)。
3、使用Sql Server或Sqlite,需要在DUF.UI类中的App.config修改,如使用Sql Server则为<add key="DAL" value="DUF.DALSQLServer" />,使用Sqlite则为<add key="DAL" value="DUF.DALSQLite" />。
4、Sqlite数据库存放位置:DUF.UI\bin\Debug\SqliteDb\SqliteDbUtilsFactory.db3,连接字符串在DUF.SQLite项目中SQLiteHelper.cs文件中。
5、Sql Server 2005数据库存放位置:DB_51aspx\SqlServerDbUtilsFactory.mdf,附加即可,本软件无用户名密码。
下单记录
用户名 | 源码评分 | 成交价 | 下单时间 | 订单状态 |
---|