1.数据库访问
数据库访问技术,在.Net中,微软提供的基础技术是ADO.Net。ADO.NET 是基于 .NET 的应用程序的数据访问模型。可以使用它来访问关系数据库系统(如 SQL Server 2000、Oracle)和其他许多具有 OLE DB 或 ODBC 提供程序的数据源。在某种程度上,ADO.NET 代表 ADO 技术的最新进展。不过,ADO.NET 引入了一些重大变化和革新,旨在解决 Web 应用程序的松耦合特性以及在本质上互不关联的特性。
ADO.NET 依赖于 .NET 数据提供程序的服务。这些提供程序提供对基础数据源的访问,并且包括五个主要对象(Connection、Command、DataSet、DataReader 和 DataAdapter)。
目前,ADO.NET 随附了两类提供程序:Bridge 提供程序和 Native 提供程序。通过 Bridge 提供程序(如那些为 OLE DB 和 ODBC 提供的提供程序),可以使用为以前的数据访问技术设计的数据库。Native 提供程序(如 SQL Server 和 Oracle 提供程序)通常能够提供性能方面的改善,部分原因在于少了一个抽象层。
l SQL Server .NET 数据提供程序。这是一个用于 Microsoft SQL Server 7.0 和更高版本数据库的提供程序。它被进行了优化以便访问 SQL Server,并且它通过使用 SQL Server 的本机数据传输协议来直接与 SQL Server 进行通讯。 当连接到 SQL Server 7.0 或 SQL Server 2000 时,应当始终使用该提供程序。
l Oracle .NET 数据提供程序。用于 Oracle 的 .NET 框架数据提供程序通过 Oracle 客户端连接软件支持对 Oracle 数据源的数据访问。该数据提供程序支持 Oracle 客户端软件版本 8.1.7 及更高版本。
l OLE DB .NET 数据提供程序。这是一个用于 OLE DB 数据源的托管提供程序。它的效率要比 SQL Server .NET 数据提供程序稍微低一些,因为它在与数据库通讯时通过 OLE DB 层进行调用。请注意,该提供程序不支持用于开放式数据库连接 (ODBC) 的 OLE DB 提供程序 MSDASQL。对于 ODBC 数据源,请改为使用 ODBC .NET 数据提供程序(稍后将加以介绍)。
l ODBC .NET 数据提供程序。用于 ODBC 的 .NET 框架数据提供程序使用本机 ODBC 驱动程序管理器 (DM) 来支持借助于 COM 互操作性进行的数据访问。
还有其他一些目前正处于测试阶段的 .NET 数据提供程序。
与各个 .NET 数据提供程序相关联的类型(类、结构、枚举等)位于其各自的命名空间中:
l System.Data.SqlClient:包含 SQL Server .NET 数据提供程序类型。
l System.Data.OracleClient:包含 Oracle .NET 数据提供程序。
l System.Data.OleDb:包含 OLE DB .NET 数据提供程序类型。
l System.Data.Odbc:包含 ODBC .NET 数据提供程序类型。
l System.Data:包含独立于提供程序的类型,如 DataSet 和 DataTable。
在各自的关联命名空间内,每个提供程序都提供了对 Connection、Command、DataReader 和 DataAdapter 对象的实现。SqlClient 实现的前缀为“Sql”,而 OleDb 实现的前缀为“OleDb”。例如,Connection 对象的 SqlClient 实现是 SqlConnection,而 OleDb 实现则为 OleDbConnection。同样,DataAdapter 对象的两个实现分别为 SqlDataAdapter 和 OleDbDataAdapter。
2.Websharp对数据库访问层的封装
在应用程序的设计中,数据库的访问是非常重要的,我们通常需要将对数据库的访问集中起来,以保证良好的封装性和可维护性。我们希望在编写应用系统的时候,不因这么多类的不同而受到影响,能够尽量做到数据库无关,当后台数据库发生变更的时候,不需要更改客户端的代码。这就需要我们在实际开发过程中将这些数据库访问类再作一次封装。下面,我们将讨论在Websharp中的做法。
在Websharp中,数据访问的主要接口是DataAccess,这个类的定义如下:
public interface DataAccess
{
#region Support Property & Method
DatabaseType DatabaseType{get;}
IDbConnection DbConnection{get;}
IDbTransaction BeginTransaction();
void Open();
void Close();
bool IsClosed{get;}
#endregion
#region ExecuteNonQuery
int ExecuteNonQuery(CommandType commandType, string commandText);
int ExecuteNonQuery(string commandText);
int ExecuteNonQuery(string commandText, QueryParameterCollection commandParameters);
int ExecuteNonQuery(CommandType commandType, string commandText, QueryParameterCollection commandParameters);
#endregion ExecuteNonQuery
//……因篇幅的原因,这里没有列出所有的方法,关于其他方法的定义请参见源代码。
}
|
在这个接口之下,再定义了AbstractDataAccsee类,实现了一些公用的数据方法,在AbstractDataAccsee类之下,扩展出了各个具体的DataAccsee实现类。整个结构可以用下面的图(图3.1)来表示:
图3.1
为了管理这些类,并且提供可扩展性,我们需要创建一个Factory类,来实现自动数据库切换的管理。这个类很简单,主要的功能就是根据参数,判断使用什么数据库,然后,返回适当的DataAccess类。这个类的定义如下:
public sealed class DataAccessFactory
{
private DataAccessFactory(){}
private static DatabaseProperty defaultDatabaseProperty;
public static DatabaseProperty DefaultDatabaseProperty
{
get{return defaultDatabaseProperty;}
set{defaultDatabaseProperty=value;}
}
public static DataAccess CreateDataAccess(DatabaseProperty pp)
{
DataAccess dataAccess;
switch(pp.DatabaseType)
{
case(DatabaseType.MSSQLServer):
dataAccess = new MSSqlDataAccess(pp.ConnectionString);
break;
case(DatabaseType.Oracle):
dataAccess = new OracleDataAccess(pp.ConnectionString);
break;
case(DatabaseType.OleDBSupported):
dataAccess = new OleDbDataAccess(pp.ConnectionString);
break;
default:
dataAccess=new MSSqlDataAccess(pp.ConnectionString);
break;
}
return dataAccess;
}
public static DataAccess CreateDataAccess()
{
return CreateDataAccess(defaultDatabaseProperty);
}
}
|
关于DatabaseProperty和DatabaseType的定义,可以参见相关源代码。
数据访问功能的调用形式如下:
DataAccess dao=DataAccessFactory.CreateDataAccess(persistenceProperty);
db.Open();
db.需要的操作
db.Close();
|
当数据库发生变化的时候,只需要修改相应的DatabaseProperty参数,DataAccessFactory会根据参数的不同,自动调用相应的类,客户端不会感觉到变化,也不用去关心。这样,实现了良好的封装性。当然,前提是,你在编写程序的时候,没有用到特定数据库的特性,例如,Sql Server的专用函数。
3.关于DataSet和EntityData
因为Websharp的O/R映射部分使用了DataSet,因此,在这里有必要对DataSet做一个说明。
相对于原有的ADO数据访问技术,ADO.NET 引入的主要变化之一是用 DataTable、DataSet、DataAdapter 和 DataReader 对象的组合取代了 ADO Recordset 对象。DataTable 表示单个表中行的集合,在这一方面类似于 Recordset。DataSet 表示 DataTable 对象的集合,同时包括将各种表绑定在一起的关系和约束。实际上,DataSet 是带有内置 XML 支持的、内存中的关系结构。
DataSet 的主要特性之一是它不了解可能用来填充它的基础数据源。它是一个不连续的、独立的实体,用于表示数据集合,并且可以通过多层应用程序的不同层在组件之间传递。它还可以作为 XML 数据流进行序列化,这使其非常适合于在不同种类的平台之间进行数据传输。ADO.NET 使用 DataAdapter 对象将数据传送到 DataSet 和基础数据源,或者从数据源传出。DataAdapter 对象还提供以前与 Recordset 关联的增强的批量更新功能。
图3.2 显示了完整的 DataSet 对象模型。
图 3.2
为了更方便的操纵数据,Websharp对DataSet进行了一些扩充,对于这些扩充的更详细的内容,会在后面的Websharp ORM部分做说明。
来源:http://www.websharp.org/
相关推荐
1、 数据库访问 2、 O/R 映射 3、 AOP 4、 分布式访问 WebSharp主要设计思路及涉及的技术: 在数据库访问部分,使用了ADO.Net和工厂模式;在ORM部分,使用了动态代码生成和即时编译,以及对DataSet进行了扩展;在AOP部分...
Websharp是众多Java Web开发技术中的一种,其核心是页面模板,它是一种通过模板引擎驱动模板来输出动态Web内容的技术。为什么要使用Websharp呢?因为它简单而高效。和Spring、Structs这些Java开发技术相比,Websharp...
4. 数据存储和检索:利用C#的数据库访问库,可以快速实现数据存取功能。 五、WebSharp教程结构 "WebSharp.doc"文档可能包含以下内容: 1. 安装和设置:介绍如何在项目中集成WebSharp和配置环境。 2. 基本概念:讲解...
它通过自动映射数据库表到对象,简化了数据访问层的编程工作。开发者可以轻松地创建、读取、更新和删除数据库中的记录,而无需关心底层的存储细节。此外,Websharp可能还支持查询构造器,允许程序员用一种更接近自然...
WebSharp是一个开源框架,主要由孙亚民开发,它提供了诸如面向切面编程(AOP)等特性。本文将深入探讨WebSharp框架的核心概念、功能以及源代码学习的价值。 一、面向切面编程(AOP) 面向切面编程是软件开发中的一...
Websharp的目标,便是设计一个基于.Net的通用的应用软件系统的框架,以简化基于.Net平台的...目前,Websharp关注于企业应用软件的以下几个方面: 1、 数据库访问 2、 O/R 映射 3、 AOP 4、 分布式访问
Websharp是一个专为构建Web应用程序而设计的框架,它结合了C#的强大功能与JavaScript的灵活性,使得开发者能够在服务器端和客户端使用同一门语言。这个"Websharp示例工程"很可能是为了展示如何利用Websharp进行开发...
WebSharp是一个针对.NET开发者构建Web应用的理想选择,它以其独特的编译器、交互层和丰富的库,实现了全栈开发的无缝体验。通过与.NET框架的深度整合,WebSharp简化了前后端开发,提升了代码质量,并且在性能和易用...
4. 数据访问层(DAL):这部分代码负责与数据库交互,可能包括ADO.NET组件,用于执行SQL查询和存储过程。 5. 状态管理:由于Web是无状态的,项目可能会使用Session、Cookie或Viewstate等机制来保持用户会话的状态。 ...
在数据库访问部分,使用了ADO.Net和工厂模式;在ORM部分,使用了动态代码生成和即时编译,以及对DataSet进行了扩展;在AOP部分,使用了Proxy机制;在Service Locator部分,使用的主要技术也是动态代码生成和即时编译. ...
WebSharper会自动处理代码转换和通信层,减轻了开发者的工作负担。 4. **编译器和运行时**: WebSharper的编译器负责将C#代码转换为可以在浏览器中执行的JavaScript代码。运行时则是处理C#代码在浏览器环境中的运行...
在本案例中,`Websharp.Mshop.BLL`可能包含了业务逻辑层的代码,负责处理这些添加操作,而`Websharp.Mshop.DAL`可能是数据访问层,实现与数据库的交互。例如,一个`AddProduct`方法可能用于添加新产品到数据库,这个...
- **封装数据库访问层**:创建一个独立的库或服务来处理所有数据库操作,使业务逻辑层与数据层解耦。 - **设计映射**:定义对象和数据库表之间的映射规则,这可以通过元数据、XML配置或注解来实现。 - **支持继承**...
在应用服务层,数据用类来表示,通过数据访问对象(DAO)处理数据库交互,业务逻辑以组件形式封装,确保事务处理的正确性和完整性。 业务服务的提供方式需要考虑如何将这些服务暴露给不同类型的客户,如Web页面或...
Websharp 是 Microsoft dotNet 的轻量级应用程序框架。