当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > ASP.NET开发电子商务网站学习经验

ASP.NET
blog程序新版本V2.0 Beta完成,提供V1.0全部源码下载
“/”应用程序中的服务器错误
asp.net(c#)复数类(复数加减乘除四则运算)
asp.net(c#)不可访问,因为它受保护级别限制
asp.net(c#) 水仙花数
ASP.NET实现用图片进度条显示投票结果
asp.net(c#) MS AJAX的安装
asp.net(c#)有关 Session 操作的几个误区
ASP.net基础知识之常见错误分析
[.net] 操纵自如-页面内的配合与通信
c# static的全部用法收集整理
使CheckBoxList的Attributes属性生效(修改微软的一个bug)
在ASP.NET中使用Session常见问题集锦
[原创]完美解决Could not load file or assembly ''AjaxPro.2'' or one of its dependencies. 拒绝访问。
在Apache环境下成功的运行ASP.NET的注意事项
ClickOnce DIY全自动更新下载升级的自我实现
asp.net jscript 一句话木马
在ASP.Net中实现flv视频转换的代码
将DataTable中的一行复制到另一个DataTable的方法
在DataTable中执行Select("条件")后,返回DataTable的方法

ASP.NET开发电子商务网站学习经验


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-04   浏览: 215 ::
收藏到网摘: n/a

前些阵子照着《Pro ASP.NET 2.0 E-Commerce in C#2005》书编辑了一个商务系统网站,想总结一下学习到的所学的知识。

该网站具有一般商务网站的特征

这里先讲讲他的框架

数据访问层

用的的存储过程操作数据库的存储,有一个Shop.DataAccess类库专门(注意我这里将原文的命名空间改为shop了)

该类库使用了一个组件来封装对数据库的操作 为 Microsoft Data Access Application Block, 其实就是将SQLHelper.cs复制到该类下就行了,该类可以自动管理存储过程的连接,参数和名称。

类库下的DataAccessBase类是一个基类,该类库几乎所有的类都会继承它,有两个属性一个是存储过程,以及返回数据库的连接字符串

注意:这里是从web.config文件中获取与数据库连接的字符串,但是在类中无法引用到Configuration类,所以我们要额外的添加引用System.Configuration.dll程序集

以下为引用的内容:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

namespace Shop.DataAccess
{
    
public class DataAccessBase
    {
        
//存储过程的名称
        protected string StoredprocedureName { setget; }

        
//获得连接字符串
        protected string ConnectionString
        {
            
get
            {
                
return ConfigurationManager.ConnectionStrings["db_shopConnectionString"].ToString();
            }
        }
    }

}

类库中的StoreProcedure类

利用枚举存储编写的存储过程名称,这样便于更改及管理

但是对于存储过程很多,一个类来存储肯定显得不够,个人建议在细分,控制一个类中的存储过程不超过20个

例如:

StoreProcedure_User,StoreProcedure_Product,StoreProcedure_Orders

以下为引用的内容:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Shop.DataAccess
{
    
public class StoredProcedure
    {
        
public enum Name
        {
            ProductByID_Select,
            Products_Select,
            Products_SelectSerach,
            ShoppingCart_Select,
            ShoppingCart_Insert,
            ShoppingCart_Update,
            ShoppingCart_Delete,
            EndUser_Insert,
            EndUserLogin_Select,
            Address_Select,
            ContactInformation_Select,
            AdminLogin_Select,
            Product_Insert,
            ProductCategory_Select,
            Product_Update,
            Orders_Select,
            OrderDetails_Select,
            OrderAll_Select,
            OrderStatus_Select,
            OrdersByID_Select,
            Orders_Update,
            ProductPromotion_Select
        }
    }
}

类库中的DataBaseHelper类

重新包装了SQLHelper类的功能,因为并不是所有SQLHelper类功能我们都会用到,我们只应用到了一小部分

以下为引用的内容:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;
using System.Data;

namespace Shop.DataAccess
{
    
public class DataBaseHelper:DataAccessBase
    {
        
public  SqlParameter[] Parameters { getset; }

        
/// <summary>
        
/// 构造函数
        
/// </summary>
        
/// <param name="storedproceducename">赋值存储过程</param>
        public DataBaseHelper(string storedproceducename)
        {
            
this.StoredprocedureName = storedproceducename;
        }

        
/// <summary>
        
/// 无数据返回
        
/// </summary>
        
/// <param name="transaction"></param>
        public void Run(SqlTransaction transaction)
        {
            SqlHelper.ExecuteNonQuery(transaction, CommandType.StoredProcedure, 
this.StoredprocedureName, this.Parameters);
        }

        
/// <summary>
        
/// 无数据返回,自己提供参数
        
/// </summary>
        
/// <param name="transaction"></param>
        
/// <param name="Parameters">参数</param>
        public void Run(SqlTransaction transaction, SqlParameter[] Parameters)
        {
            SqlHelper.ExecuteNonQuery(transaction, CommandType.StoredProcedure, 
this.StoredprocedureName, Parameters);
        }

        
/// <summary>
        
/// 有参数返回(DataSet)
        
/// </summary>
        
/// <param name="connectionstring"></param>
        
/// <param name="parameters"></param>
        
/// <returns></returns>
        public DataSet Run(string connectionstring, SqlParameter[] parameters)
        {
            DataSet ds;
            ds 
= SqlHelper.ExecuteDataset(connectionstring, this.StoredprocedureName, parameters);
            
return ds;
        }

        
/// <summary>
        
/// 返回第一行第一列的值
        
/// </summary>
        
/// <param name="connectionstring"></param>
        
/// <param name="parameters"></param>
        
/// <returns></returns>
        public object RunScalar(string connectionstring, SqlParameter[] parameters)
        {
            
object obj;
            obj 
= SqlHelper.ExecuteScalar(connectionstring, this.StoredprocedureName, parameters);
            
return obj;
        }

        
/// <summary>
        
/// 返回第一行第一列的值
        
/// </summary>
        
/// <param name="transaction"></param>
        
/// <param name="parameters"></param>
        
/// <returns></returns>
        public object RunScalar(SqlTransaction transaction, SqlParameter[] parameters)
        {
            
object obj;
            obj 
= SqlHelper.ExecuteScalar(transaction, this.StoredprocedureName, parameters);
            
return obj;
        }

        
/// <summary>
        
/// 无参数返回(DataSet)
        
/// </summary>
        
/// <param name="connectionstring"></param>
        
/// <returns></returns>
        public DataSet Run(string connectionstring)
        {
            DataSet ds;
            ds 
= SqlHelper.ExecuteDataset(connectionstring, CommandType.StoredProcedure, this.StoredprocedureName);
            
return ds;
        }

        
/// <summary>
        
/// 无返回值
        
/// </summary>
        public void Run()
        {
            SqlHelper.ExecuteNonQuery(
base.ConnectionString, CommandType.StoredProcedure, this.StoredprocedureName, this.Parameters);
        }

        
/// <summary>
        
/// 返回是SqlDataReader
        
/// </summary>
        
/// <param name="parameters"></param>
        
/// <returns></returns>
        public SqlDataReader Run(SqlParameter[] parameters)
        {
            SqlDataReader dr;
            dr 
= SqlHelper.ExecuteReader(base.ConnectionString, CommandType.StoredProcedure, this.StoredprocedureName, parameters);
            
return dr;
        }
    }
}

业务逻辑层

Shop.BusinessLogic

这里涉及到要编写接口

首先了解下什么是接口,接口就是只包含抽象成员的应用类型,接口中的成员可以是方法,索引器,属性和事件,而不可以是包含任何常量,构造函数,静态成员或数据字段。接口只包含这些成员的声明。而具体的实现必须从实现该接口的任何类中进行初始化。

这里编辑一个接口是因为所有该类库的类都会调用一个函数来实现获得数据

以下为引用的内容:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Shop.BusinessLogic
{
    
interface IBusinessLogic
    {
        
void Invoke();
    }
}

Shop.Common类库是编写一个公共类

Shop.Operational自定义一些类

具体的一些内容留在下面文章分析