博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
不想当将军的学生,不是好程序员——数据访问层DAL
阅读量:7124 次
发布时间:2019-06-28

本文共 4770 字,大约阅读时间需要 15 分钟。

源代码:13033480群共享

郭德纲说的原话是:“不想当裁缝的厨子不是好司机”。

 

他说的是这个意思吗?

 

又能天天在家做可口的饭菜(你把厨子理解成给别人做饭,那,我就没办法了);

又买得起得体漂亮的好衣服(你把裁缝理解成给别人量体裁衣,那,我就没办法了);

又开得起宝马奔驰兜风的人(你把司机理解成给别人卖苦力开破车的人,那,我就没办法了);

才能讨得美女的欢心。

 

呵呵,仁者见仁,我,也就这智商了…

 

我说的这句“不想当将军的学生,不是好程序员”,可没那么绕人:

 

将军嘛:要有系统的观点,要指挥别人做事,不需要事事躬亲,这是一种思想;

学生嘛:学生的最高境界是什么?是“学士”啦…

“学士”和“战士”没什么大的区别啦,一个打仗的专业人士,一个学习的专业人士而已…

程序员嘛:计算机专业的学生,一个有系统观点的学士,难道不是一个好的程序员吗??

 

前面,我们已经当好了一个裁缝,量体裁衣,精心打造了一个数据集Model;我们又把ADO.NET的核心类封装到了SQLHelper中,构建了一个函数集DBUtilty。

那,现在,是时候,我们组建一个职能部门,把那些基础的脏活、累活都交给他们去做了吧?

 

对了,这个职能部门,就叫做数据访问层DAL…

 

【操作步骤】

一、添加类库DAL,在DAL中添加类Category.cs,并在类库中添加函数GetCategories(),代码如下:

 

using System;using System.Data;using System.Collections.Generic;using System.Text;using System.Data.SqlClient;using WestGarden.Model;using WestGarden.DBUtility;namespace WestGarden.DAL{    public class Category    {        private const string SQL_SELECT_CATEGORIES = "SELECT CategoryId, Name, Descn FROM Category";        public IList
GetCategories() { IList
categories = new List
(); using (SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_CATEGORIES, null)) { while (rdr.Read()) { CategoryInfo cat = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2)); categories.Add(cat); } } return categories; } }}

函数GetCategories()要在SQLHelper中读取连接字符串,因此,需要在SQLHelper.cs中添加代码:

public static readonly string ConnectionStringLocalTransaction = ConfigurationManager.ConnectionStrings["NetShopConnString"].ConnectionString;

 

注意添加引用System.Configuration。

二、使用用户控件

在Web中新建文件夹Controls并在其中添加用户控件NavigationControl.ascx,窗体页和代码页代码分别如下:

1、NavigationControl.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="NavigationControl.ascx.cs" Inherits="WestGarden.Web.NavigationControl" %><%@ OutputCache Duration="100000" VaryByParam="*" %>

2、NavigationControl.ascx.cs

using System;using System.Web.UI.WebControls;using WestGarden.DAL;namespace WestGarden.Web {    public partial class NavigationControl : System.Web.UI.UserControl {                       private string controlStyle;        protected string ControlStyle {            get { return controlStyle; }        }	        protected void GetControlStyle() {            if (Request.ServerVariables["SCRIPT_NAME"].ToLower().IndexOf("default.aspx") > 0)                controlStyle = "navigationLinks";            else                controlStyle = "mainNavigation";        }        protected void Page_Load(object sender, EventArgs e) {            GetControlStyle();            BindCategories();            string categoryId = Request.QueryString["categoryId"];            if (!string.IsNullOrEmpty(categoryId))                SelectCategory(categoryId);        }        private void SelectCategory(string categoryId) {            foreach (RepeaterItem item in repCategories.Items) {                HiddenField hidCategoryId = (HiddenField)item.FindControl("hidCategoryId");                if(hidCategoryId.Value.ToLower() == categoryId.ToLower()) {                    HyperLink lnkCategory = (HyperLink)item.FindControl("lnkCategory");                    lnkCategory.ForeColor = System.Drawing.Color.FromArgb(199, 116, 3);                    break;                }            }        }        private void BindCategories() {            Category category = new Category();            repCategories.DataSource = category.GetCategories();            repCategories.DataBind();                    }    }}

 

三、为Default.aspx添加主题WestGarden并添加样式表StyleSheet.css,在Default.aspx中应用主题,删除Default.aspx.cs代码页中的代码及Default.aspx中Reapeter控件,直接把用户控件拖入到页面中。

 

【几点说明】

1、  用户控件NavigationControl,由于要应用在首页和母版页两个地方,在这两个地方的样式是不一样的,为此,有了函数GetControlStyle(),通过判断地址中有没有default.aspx来确定采用什么样式。

2、  母版页中的导般栏,选择点击分类项后,相应分类项的颜色会改变。为此,有了函数SelectCategory(string categoryId),通过地址栏中获取的CategoryId,查询预先放置在HiddenField中的CategoryId,获取相应的Repeater控件的分类项,并设置相应HyperLink的颜色。

3、  我们把ADO.NET的核心类封装在SQLHelper.cs中,只要告诉它针对哪个连接,命令类型是什么、命令内容是什么,命令参数是什么,就可以使用其中的通用数据库访问函数,完成基本的查询、更新、插入、删除操作。

4、  我们把基本的查询、更新、插入、删除操作的函数,封装在数据访问层DAL中,也就是把访问数据库的基本参数:针对哪个连接、命令类型、命令内容、命令参数,都存放在数据访问层的相应函数中,这样,上一层,在我们现在这个两层的结构中的应用层,就不再做那些具体的连接、执行命令操作;不再做那些具体的配置连接字符串、命令内容的操作,只需要简单发布一个指令,调用一个GetCategories()函数,就一切都OK了,我们,是不是已经由奴隶到将军了呢????

5、关于层次架构的问题,我转载的一篇文章讲得非常好,举的例子也特别地好,大家有时间,可以去看看:

另:前面,我们十八相送,把ADO.NET核心类送到了类库DBUtility中的SQLHelp.cs类中,这次,就一次性把查询商品分类表Name字段的功能段代码,直接形成GetCategories(),直接放在了数据访问层,没有再次来个十八相送,实在只是为了不让程序员中的有情人,再次伤心过度之原因,特此说明...

版权所有©2012,西园电脑工作室.欢迎转载,转载请注明出处.更多文章请参阅博客

转载于:https://www.cnblogs.com/WestGarden/archive/2012/06/11/3138345.html

你可能感兴趣的文章
《Python语言程序设计》——2.15 本章总结
查看>>
《音乐达人秀:Adobe Audition CC实战222例》——实例5 麦克风说话和音乐播放等所有声音都混合录制...
查看>>
TIOBE 9 月编程语言排行榜,新 TIOBE 指数算法
查看>>
《Adobe Photoshop CC经典教程》—第2课2.6节使用Spot Healing Brush工具
查看>>
《AngularJS实战》——2.3 Angular中的模板
查看>>
《Node.js区块链开发》——2.5 风险提示
查看>>
《ANSYS 14热力学/电磁学/耦合场分析自学手册》——2.9 图形窗口
查看>>
阿里 MySQL 团队加入参与 WebScaleSQL 开发
查看>>
《Adobe After Effects CC经典教程》——2.3 创建新合成图像
查看>>
提高 PHP 代码质量的 36 计
查看>>
《Adobe Premiere Pro CS4经典教程》——1.4 提供标准的数字视频工作流
查看>>
《CCNP TSHOOT 300-135学习指南》——1.4节本章小结
查看>>
诺基亚将更名为微软移动
查看>>
Vue.js 作者尤雨溪加盟 Weex 团队担任技术顾问
查看>>
js初级脚本算法
查看>>
《iOS应用开发指南——使用HTML5、CSS3和JavaScript》——1.1节移动魔力和掌上电脑...
查看>>
《Microduino实战》——3.5 I/O操作——现学现用
查看>>
《思科数据中心I/O整合》一2.2 无损耗以太网(Lossless Ethernet)
查看>>
《触摸屏游戏设计》——4.1节 起名字
查看>>
《树莓派渗透测试实战》——1.2 组装树莓派
查看>>