三层架构例子

三层架构例子

 

一、下载动软软件(http://www.maticsoft.com/),或者从教师机的ftp上直接下载。

二、打开SQL Server2000企业管理器,附加数据库ShopDB

三、运行“动软.Net代码生成器”

四、在“常用操作”-》选择“新增数据库服务器”-》“SQL Server”,接下来在服务器类型中选择“SQL Server2000,点击“连接/测试”成功后,在数据库中选择“ShopDB”,点击“确定”,如果有出错提示,不用管它。

   

   

五、在左侧的“服务器”中,点击右键“刷新”,则会出现刚才的数据库节点,接着在数据库节点点击右键“连接服务器”。

   

六、在“常用操作”-》选择“生成代码项目”,名称为“Shop”,设置保存代码的位置,接下来把表都添加进来,然后点击“开始生成”。

 

 

 

 

 

 

七、生成的项目文件如下:

   

八、打开“Shop”解决方案文件。

Model,模型层,一个模型对应一张表,一般不改。

BLL,业务逻辑层,被页面调用,需要大量扩充。

WEB,页面展示层,需要大量扩充。

DAL,数据访问层,隐藏在后台,少量修改。

   

 

    数据的操作关系:页面-BLL-DAL

   尽量避免页面直接访问DAL,也就是页面中不涉及数据库的查询语句。

九、修改web.config配置文件中的数据库连接参数。

<add key="ConnectionString" value="server=127.0.0.1;database=ShopDB;uid=sa;pwd="/>

十、在“web”项目中的“Controls”文件夹,添加一个“Header.ascx”用户控件,控件的标签代码如下:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Header.ascx.cs" Inherits="Maticsoft.Web.Header" %>

<asp:LinkButton ID="LinkButton1" runat="server" PostBackUrl="~/Default.aspx">首页</asp:LinkButton>

<asp:LinkButton ID="LinkButton2" runat="server" PostBackUrl="~/UserReg.aspx">用户注册</asp:LinkButton>

<asp:LinkButton ID="LinkButton3" runat="server" PostBackUrl="~/ProductView.aspx">产品浏览</asp:LinkButton>

<asp:LinkButton ID="LinkButton4" runat="server" PostBackUrl="~/OrderView.aspx">查看订单</asp:LinkButton>

<asp:LinkButton ID="LinkButton5" runat="server" PostBackUrl="~/Admin/Login.aspx">后台管理</asp:LinkButton>

 

效果图:

十一、       打开母版页“MasterPage.master”,把“Header.ascx”用户控件拖放到顶部位置。

   

十二、       添加一个UserReg.aspx 的“WEB 内容表单”,选择母版页“MasterPage”,设计一个注册页面如下图所示:

参考标签代码(注意控件的ID属性):

<table border="0">

        <tr>

            <td style="width: 88px">

                用户名:</td>

            <td style="width: 100px">

                <asp:TextBox ID="tb_UserName" runat="server"></asp:TextBox></td>

        </tr>

        <tr>

            <td style="width: 88px">

                真实姓名:</td>

            <td style="width: 100px">

                <asp:TextBox ID="tb_TrueName" runat="server"></asp:TextBox></td>

        </tr>

        <tr>

            <td style="width: 88px">

                &nbsp; 码:</td>

            <td style="width: 100px">

                <asp:TextBox ID="tb_PassWord" runat="server"></asp:TextBox></td>

        </tr>

        <tr>

            <td colspan="2">

                <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="注册" /></td>

        </tr>

    </table>

 

编写事件代码,双击按钮:

        protected void Button1_Click(object sender, EventArgs e)

        {

            Maticsoft.BLL.Users bllUser;

            Maticsoft.Model.Users modelUser;

 

            bllUser = new Maticsoft.BLL.Users();

            modelUser = new Maticsoft.Model.Users();

 

            modelUser.UserName = tb_UserName.Text;

            modelUser.TrueName = tb_TrueName.Text;

            modelUser.PassWord = tb_PassWord.Text;

 

            bllUser.Add(modelUser);

            ClientScript.RegisterStartupScript(GetType(), "message", "<script language='javascript' defer>alert('注册成功!');</script>");

 

        }

 

运行效果:

十三、       添加一个ProductView.aspx 的“WEB 内容表单”,选择母版页“MasterPage”,设计一个产品浏览页面如下图所示:

分别添加一个GridView控件和ObjectDataSource控件

标签代码如下:

    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"

        DataSourceID="ObjectDataSource1" AutoGenerateColumns="False" PageSize="2">

        <Columns>

            <asp:BoundField DataField="ProductName" HeaderText="产品名称" />

            <asp:BoundField DataField="Price" HeaderText="价格" />

            <asp:TemplateField>

                <EditItemTemplate>

                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("PciURL") %>'></asp:TextBox>

                </EditItemTemplate>

                <ItemTemplate>

                    <asp:Image ID="Image1" runat="server" Height="139px" ImageUrl='<%# Eval("PciURL") %>'

                        Width="128px" />

                </ItemTemplate>

            </asp:TemplateField>

            <asp:TemplateField>

                <ItemTemplate>

                    <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "Buy.aspx?ProductID="+Eval("ProductID").ToString() %>'

                        Text="购买"></asp:HyperLink>

                </ItemTemplate>

            </asp:TemplateField>

        </Columns>

    </asp:GridView>

    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetAllList"

        TypeName="Maticsoft.BLL.Prodcuts"></asp:ObjectDataSource>

运行效果:

十四、       扩充订单视图的查询语句,因为视图部分代码没有自动生成。

打开项目“DAL”里面的“Orders.cs”文件,添加一个方法,代码如下:

        /// <summary>

        /// 获得视图数据列表

        /// </summary>

        public DataSet GetViewList(string strWhere)

        {

            StringBuilder strSql = new StringBuilder();

            strSql.Append("select * ");

            strSql.Append(" FROM OrderView ");

            if (strWhere.Trim() != "")

            {

                strSql.Append(" where " + strWhere);

            }

            return DbHelperSQL.Query(strSql.ToString());

}

   一般在显示数据表的时候,如果需要多表查询的,在数据库中建立好视图,然后自己扩充一下查询语句。

 

十五、       扩充逻辑层的订单处理逻辑。

        打开项目“BLL”里面的“Orders.cs”文件,添加一个方法,代码如下:

       /// <summary>

        /// 获得视图数据列表

        /// </summary>

        public DataSet GetAllViewList()

        {

            return dal.GetViewList("");

        }

十六、       添加一个OrderView.aspx 的“WEB 内容表单”,选择母版页“MasterPage”,设计一个订单查看页面如下图所示:

分别添加一个GridView控件和ObjectDataSource控件

标签代码如下:

<asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource1">

    </asp:GridView>

    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetAllViewList" TypeName="Maticsoft.BLL.Orders"></asp:ObjectDataSource>

运行效果:

十七、       接下来,添加后台产品管理功能。在Admin文件夹中,添加一个AdminProduct.aspx 的“WEB 内容表单”,选择母版页“MasterPage”,设计一个订单查看页面如下图所示:

标签代码如下:

    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"

        AutoGenerateColumns="False" DataSourceID="ObjectDataSource1">

        <Columns>

            <asp:BoundField DataField="ProductName" HeaderText="产品名称" SortExpression="ProductName" />

            <asp:BoundField DataField="Price" HeaderText="价格" SortExpression="Price" />

            <asp:TemplateField HeaderText="操作">

                <ItemTemplate>

                    <asp:LinkButton ID="LinkButton1" runat="server"

                       PostBackUrl='<%# "EditProduct.aspx?ProductID="+Eval("ProductID").ToString() %>'>修改</asp:LinkButton>

                    <asp:LinkButton ID="LinkButton2" runat="server" CommandArgument='<%# Eval("ProductID").ToString() %>'

                        OnCommand="LinkButton2_Command" OnClientClick='return confirm("是否删除?");'>删除</asp:LinkButton>

                </ItemTemplate>

            </asp:TemplateField>

        </Columns>

    </asp:GridView>

    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetAllList"

        TypeName="Maticsoft.BLL.Prodcuts"></asp:ObjectDataSource>

编写删除代码:

        protected void LinkButton2_Command(object sender, CommandEventArgs e)

        {

            Maticsoft.BLL.Prodcuts bllProduct = new Maticsoft.BLL.Prodcuts();

            //通过CommandArgument获取产品编号,并删除

            bllProduct.Delete(int.Parse(e.CommandArgument.ToString()));

            //刷新数据

            this.GridView1.DataBind();

        }

运行效果:

十八、       Admin文件夹中,添加一个AddProduct.aspx 的“WEB 内容表单”,选择母版页“MasterPage”,设计一个订单查看页面如下图所示:

    

     标签代码如下:

    <table border="0" cellpadding="0" cellspacing="0">

        <tr>

            <td style="width: 100px">

                产品名称:</td>

            <td style="width: 100px">

                <asp:TextBox ID="tb_ProductName" runat="server"></asp:TextBox></td>

        </tr>

        <tr>

            <td style="width: 100px; height: 19px">

                产品价格:</td>

            <td style="width: 100px; height: 19px">

                <asp:TextBox ID="tb_Price" runat="server"></asp:TextBox></td>

        </tr>

        <tr>

            <td style="width: 100px">

                上传图片:</td>

            <td style="width: 100px">

                <asp:FileUpload ID="FileUpload1" runat="server" /></td>

        </tr>

        <tr>

            <td colspan="2">

                <asp:Button ID="Button1" runat="server" Text="添加" /></td>

        </tr>

</table>

编写添加按钮的事件代码如下:

protected void Button1_Click(object sender, EventArgs e)

        {

            //先上传文件

            string filepath = "";

            string filename = "";

            string serverpath = "";

            try

            {

                  if (FileUpload1.PostedFile.FileName.Trim() != "")

                  {

                      filepath = FileUpload1.PostedFile.FileName;

                      filename = filepath.Substring(filepath.LastIndexOf("//")+1);

                      serverpath = Server.MapPath("~/Images/") + filename;

                      FileUpload1.PostedFile.SaveAs(serverpath);

                  }

             }

             catch (Exception ex)

             {

             }

            //保存记录

            Maticsoft.BLL.Prodcuts bllProduct = new Maticsoft.BLL.Prodcuts();

            Maticsoft.Model.Prodcuts modelProduct = new Maticsoft.Model.Prodcuts();

            modelProduct.ProductName = tb_ProductName.Text;

            modelProduct.Price = decimal.Parse(tb_Price.Text);

            modelProduct.PciURL = "~/Images/" + filename;

            bllProduct.Add(modelProduct);

 

            ClientScript.RegisterStartupScript(GetType(), "message", "<script language='javascript' defer>alert('添加成功!');</script>");

        }

十九、       Admin文件夹中,添加一个EditProduct.aspx 的“WEB 内容表单”,选择母版页“MasterPage”,设计一个订单查看页面如下图所示:

标签代码如下:

    <table border="0" cellpadding="0" cellspacing="0">

        <tr>

            <td style="width: 100px">

                产品名称:</td>

            <td style="width: 100px">

                <asp:TextBox ID="tb_ProductName" runat="server"></asp:TextBox>

                <asp:HiddenField ID="hf_ProductID" runat="server" />

            </td>

        </tr>

        <tr>

            <td style="width: 100px; height: 19px">

                产品价格:</td>

            <td style="width: 100px; height: 19px">

                <asp:TextBox ID="tb_Price" runat="server"></asp:TextBox></td>

        </tr>

        <tr>

            <td style="width: 100px">

                上传图片:</td>

            <td style="width: 100px">

                <asp:FileUpload ID="FileUpload1" runat="server" /></td>

        </tr>

        <tr>

            <td colspan="2">

                <asp:Button ID="Button1" runat="server" Text="保存" /></td>

        </tr>

  </table>

编写代码:

        protected void Page_Load(object sender, EventArgs e)

        {

            //获取产品编号,并查询产品的信息

            string ProductID = Request["ProductID"].ToString();

            hf_ProductID.Value = ProductID;

 

            Maticsoft.BLL.Prodcuts bllProduct = new Maticsoft.BLL.Prodcuts();

            Maticsoft.Model.Prodcuts modelProdcut = new Maticsoft.Model.Prodcuts();

 

            modelProdcut = bllProduct.GetModel(int.Parse(ProductID));

 

            tb_ProductName.Text = modelProdcut.ProductName;

            tb_Price.Text = modelProdcut.Price.ToString();

 

        }

 

        protected void Button1_Click(object sender, EventArgs e)

        {

            //先上传文件

            string filepath = "";

            string filename = "";

            string serverpath = "";

            try

            {

                if (FileUpload1.PostedFile.FileName.Trim() != "")

                {

                    filepath = FileUpload1.PostedFile.FileName;

                    filename = filepath.Substring(filepath.LastIndexOf("//") + 1);

                    serverpath = Server.MapPath("~/Images/") + filename;

                    FileUpload1.PostedFile.SaveAs(serverpath);

                }

            }

            catch (Exception ex)

            {

            }

            //保存记录

            Maticsoft.BLL.Prodcuts bllProduct = new Maticsoft.BLL.Prodcuts();

            Maticsoft.Model.Prodcuts modelProduct = new Maticsoft.Model.Prodcuts();

            modelProduct.ProductName = tb_ProductName.Text;

            modelProduct.Price = decimal.Parse(tb_Price.Text);

            //这里没有考虑无重新上传图片的情况,同学们可以自己添加代码实现

            modelProduct.PciURL = "~/Images/" + filename;

 

            modelProduct.ProductID = int.Parse(hf_ProductID.Value);

 

            bllProduct.Update(modelProduct);

 

            ClientScript.RegisterStartupScript(GetType(), "message", "<script language='javascript' defer>alert('修改成功!');</script>");

        }

二十、        

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值