在SQL Server中编写通用数据访问方法(5)
作者:doorsir 来源:赛迪网技术社区 发布时间:2009-01-20 11:35:00
我们必须在此文件内指定两条信息。第一条信息是规范的连接字符串(用于为更改提供机会),如服务器名称或其他一些用于连接的参数。第二条信息是程序集的完全限定名,应用程序的上一层将动态加载此程序集以查找与特定数据源一起使用的类:
让我们再来看一下这部分代码:
using System;
using System.Data;
using System.Configuration;
using System.Reflection;
using Common;
namespace BLL
{
public class Customers
{
public DataTable GetAllCustomers()
{
string AssemblyName =
ConfigurationSettings.AppSettings
["DALAssembly"];
string TypeName = "DAL.CustomersData";
IDbCustomers cd =
// (IDbCustomers)=
Assembly.Load(AssemblyName).
CreateInstance(mytype);
DataTable dt = cd.GetCustomers();
return dt;
}
public DataSet GetCustomerOrders()
{
// 待定
return null;
}
}
}
您可以看到,程序集使用从配置文件中读取的名称进行加载,并创建和使用 CustomersData 类的实例。
一些可能的改进
要了解我所建议的方法的示例,请查看 NET Pet Shop v3.0 示例应用程序。建议您下载此示例并深入了解它,不仅是为了解决可移植性问题,同时也是为了解决其他相关问题(如缓存和性能优化)。
在为可移植应用程序设计数据访问层的过程中,一个需要注意的重要问题是如何与其他层进行信息通信。在本文的示例中,我只使用了一个普通的 DataTable 实例;在生产环境中,您可能希望根据必须表示的数据类型(您必须处理分层结构等)考虑不同的解决方案。在这里,我不希望从头开始,建议您查阅 Designing Data Tier Components and Passing Data Through Tiers 指南,它详细描述了不同情况以及所建议的解决方案的优点。
如我简介中所述,在设计阶段,应该考虑您的目标数据源所公开的特定特性以及总体数据访问。这应该涵盖存储过程、XML 序列化等事项。关于 Microsoft? SQL Server? 2000,您可以在下面的网址中找到有关如何优化使用这些特性的介绍:.NET Data Access Architecture Guide。强烈建议您阅读一下该指南。
我总是收到许多关于 Data Access Application Block 以及它如何与参数关联(如本文所述)的请求。这些 .NET 类充当 SQL Server .NET 数据提供程序之上的抽象层,并使您能够编写更多优秀代码与数据库服务器进行交互。下面是一段演示可行操作的代码:
DataSet ds = SqlHelper.ExecuteDataset(
connectionString,
CommandType.StoredProcedure,
"getProductsByCategory",
new SqlParameter("@CategoryID", categoryID));
此方法还有一个外延,您可以在 GotDotNet 上的开放源代码 Data Access Block 3.0 (Abstract Factory Implementation) 示例中找到。此版本实现相同的抽象工厂模式,并使您能够根据可用的 .NET 数据提供程序使用不同数据源。
结论
您现在应能够根据选择的特定数据源构建不需要修改的业务逻辑类,并可以利用给定数据源的唯一特性获得更好的效果。这是有代价的:我们必须实现多组类,以便封装特定数据源的低级别操作,以及可以为每个特定数据源(存储过程、函数等)构建的所有可编程对象。如果希望获得高性能和高可移植性,就必须付出这样的代价。根据我的实际经验,这是完全值得的!


猜你喜欢
- 什么是爬虫爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源
- 前言主要介绍OpenCV中的分水岭算法、图像金字塔对图像进行分割的方法。一、使用分水岭算法分割图像分水岭算法的基本原理为:将任意的灰度图像视
- Python处理json字符串中的非法双引号工作中数据清洗时遇到以下情况:a = '{"地区": "湖
- 感谢人类方方面面的创新,今天Web开发已经不需要在如何设计网站上面浪费时间了。框架和库帮助web开发者得以专注于真正的开发工作上。下面的这些
- 字符串是Python中最常用的数据类型1、创建字符串1.1 使用 ’ ’ 或 " &quo
- php获取文件创建时间、修改时间常用代码filemtime ( string filename )返回文件上次被修改的时间,出错时返回 FA
- 在页面层次结构,数据较多的时候,用v-if或者v-show就会出现div闪现,或者部分闪烁的结果。可以在根元素添加v-cloak来解决,并且
- python代码 # -*- coding: utf-8 -*- import Image,ImageDraw,Imag
- 一、Ajax 跨域请求Ajax 请求一个目标地址为非本域(协议、主机、端口任意一个不同)的 web 资源。前端http://192.168.
- 如何制作一个弹出式的调查窗口?执行下面这段ASP代码: <% &n
- 在内容为主的网站中,搜索框往往是最常用的设计元素之一。从可用性的角度来看,搜索功能是用户有了明确的内容想看的时候最后使用的功能。如果一个网站
- 虽然小型web应用程序用单个脚本可以很方便,但这种方法却不能很好地扩展。随着应用变得复杂,在单个大的源文件中处理会变得问题重重。与大多数其他
- 背景介绍PyTorch 训练的模型,需要在Jetson nano 上部署,jetson 原生提供了TensorRT 的支持,所以一个比较好的
- 学习爬虫有一段时间了,今天使用Scrapy框架将校花网的图片爬取到本地。Scrapy爬虫框架相对于使用requests库进行网页的爬取,拥有
- Python3进制之间的转换在Python里面实现进制之间的转换是非常方便的,有专门的函数来进行这个操作:下面直接上代码:# 进制之间的转换
- 例如,如果列a被定义为unique,并且值为1,则下列语句有同样的效果,也就是说一旦出入的记录中存在a=1的情况,直接更新c = c + 1
- 最近在内部讨论关于”完美三栏”的话题,看到一篇”In Search of the Holy Grail“,相当的好.故此翻译之.In Sea
- 1. test.txt文件,数据以逗号分割,第一个数据为x坐标,第二个为y坐标,数据如下:1.1,22.1,23.1,34.1,540,38
- 连接mysql常用工具mysql作为数据库服务器来运行,任何满足mysql通信规范的软件都可以作为客户端来连接服务器。常用的客户端:navi
- 本文实例讲述了python使用 __init__初始化操作。分享给大家供大家参考,具体如下:# -*- coding:utf-8 -*-#