zoukankan      html  css  js  c++  java
  • 手动搭建简单的三层框架

    第一、三层框架可以手动搭建,也可以用动软代码生成器来实现,本文使用手动搭建来做,首先先建立一个ASP.Net应用程序ThreeLayerWebDemo,然后在解决方案下分别建立四个类库BLL、DAL、Model、Common。

    第二、在ThreeLayerWebDemo中新建一个文件夹News,在News文件夹下建立一个一般处理程序NewsList.ashx和一个NewsListTemp.html模板,并且将以上各个类库里的类名做更改,改为容易记且与类的功能属性一致得名字。

    NewsList.ashx代码如下:

    using Model;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Web;
    
    namespace ThreeLayerDemo.News
    {
        /// <summary>
        /// NewsList 的摘要说明
        /// </summary>
        public class NewsList : IHttpHandler
        {
    
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/html";
                BLL.NewsInfoService NewsInfoService = new BLL.NewsInfoService();//引用BLL
                List<NewsInfo> getNews= NewsInfoService.GetAllNews();//获得数据库里的新闻信息
                StringBuilder sb = new StringBuilder();
                foreach (var item in getNews)
                {//dId, dTId, dName, dContent, dlnTime, dEditTime, disDeleted
                    sb.AppendFormat("<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td><td><a href='#'>操作</a></td></tr>", item.dId, item.dName, item.dContent, item.dlnTime, item.dEditTime, item.disDelete);
                }
                string TempString = File.ReadAllText(context.Request.MapPath("NewsListTemp.html"));
                string result= TempString.Replace("@trBody", sb.ToString());
                context.Response.Write(result);
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }

    NewListTemp.html模板中的代码如下:

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title></title>
        <meta charset="utf-8" />
    </head>
    <body>
       
        <table border="1" width="6">
            <tr>
             <th>dId</th><th>dName</th><th>dContent</th><th>dlnTime</th><th>dEditTime</th><th>disDeleted</th> <th>详 情</th>           
            </tr>
            @trBody
        </table>
    </body>
    </html>


    在以上一般处理程序NewsList中,当程序执行该代码时(该处的方法需要手动生成),则跳转到BLL类库下的NewsInfoService类中,并且在该类中生成GetAllNews()方法。

     BLL.NewsInfoService NewsInfoService = new BLL.NewsInfoService();//引用BLL
                List<NewsInfo> getNews= NewsInfoService.GetAllNews();//获得数据库里的新闻信息

    NewsInfoService类中的代码如下:

    using Model;
    using DAL;
    using System.Collections.Generic;
    namespace BLL { public class NewsInfoService { private NewsInfoDal newsInfoDal = new NewsInfoDal();//为什么要写为Private public List<NewsInfo> GetAllNews() { return newsInfoDal.GetAllNews(); } } }


    Model类库下的NewsInfo类主要用于存放从数据库中采集到的数据,用属性来存储,代码如下

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Model
    {
        public class NewsInfo
        {
            //dId, dTId, dName, dContent, dlnTime, dEditTime, disDeleted
            public int dId { get; set; }
            public string dName { get; set; }
            public string dContent { get; set; }
            public DateTime dlnTime { get; set; }
            public DateTime dEditTime { get; set; }
            public int disDelete { get; set; }
    
           
           
        }
    }

    DAL类库中的NewsInfoDAL这个类主要是用来建立数据库连接、操作数据库使用,在该类库中还需要封装一个SQLHelper类。
    NewsInfoDAL.cs 中的代码如下所示:

    using Model;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace DAL
    {
        public class NewsInfoDal
        {
            List<NewsInfo> list = new List<NewsInfo>();
            public List<NewsInfo> GetAllNews()
            {
                string sql = "select dId,  dName, dContent, dlnTime, dEditTime, disDeleted from ContentInfo";
                //dId, dTId, dName, dContent, dlnTime, dEditTime, disDeleted
                using (SqlDataReader reader=SqlHelper.ExecuteReader(sql))
                {
                    if (reader.HasRows)
                    {
                       
                        while (reader.Read())
                        {
                            NewsInfo dt = new NewsInfo();
                            dt.dId = reader.GetInt32(0);
                            dt.dName = reader.GetString(1);
                            dt.dContent = reader.GetString(2);
                            dt.dlnTime = reader.GetDateTime(3);
                            dt.dEditTime = reader.GetDateTime(4);
                            dt.disDelete = reader.GetInt32(5);
                            list.Add(dt);
                        }
                         
                    }
                    return list;
                }
            }
        }
    }

    下面在DAL类库下封装一个SQLHelper

    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace DAL
    {
       public static class SqlHelper
        {
            //写三个方法:增删改,返回一个值,返回多行或多个值
            //将连接数据库的字符串写在一个引用中
            private static readonly string constr = ConfigurationManager.ConnectionStrings
                ["Mysqlserver"].ConnectionString;//
    
            
            //写一个方法来执行增删改
            public static int ExecuteNonQuery(string sql,params SqlParameter[] pms)
            {
                using (SqlConnection con=new SqlConnection (constr))
                {
                    using (SqlCommand cmd=new SqlCommand (sql,con))
                    {
                        if(pms!=null)
                        {
                            cmd.Parameters.AddRange(pms);
                        }
                        con.Open();
                        return cmd.ExecuteNonQuery();
                    }
                }
            }
    
            /// <summary>
            /// 写一个方法执行返回一个值的
            /// </summary>
            /// <returns></returns>
            public static object ExecuteScalar(string sql,params SqlParameter[] pms)
            {
                using (SqlConnection con=new SqlConnection (constr ))
                {
                    using (SqlCommand cmd=new SqlCommand (sql,con))
                    {
                        if(pms!=null)
                        {
                            cmd.Parameters.AddRange(pms);//把sql中的参数给执行命令
                        }
                        con.Open();
                        return cmd.ExecuteScalar();
    
                    }
                }
            }
    
            /// <summary>
            /// 写一个方法来返回多个值
            /// </summary>
            /// <param name="sql"></param>
            /// <param name="pms"></param>
            /// <returns></returns>
            public static SqlDataReader ExecuteReader(string sql,params SqlParameter[] pms)
            {
                SqlConnection con = new SqlConnection(constr);
                using (SqlCommand cmd = new SqlCommand(sql, con))
                {
                    if (pms != null)
                    {
                        cmd.Parameters.AddRange(pms);
                    }
                    try
                    {
                        con.Open();
                        return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);//这样返回值的时候就将连接对象关闭了
                    }
                    catch
                    {
                        con.Close();
                        con.Dispose();
                        throw;
    
                    }
                    }
                
            }
               
        }
    }

    数据库连接字符串写在Web.config中,(注意:在WinForm中则写在App.config中)

    <?xml version="1.0" encoding="utf-8"?>
    <!--
      有关如何配置 ASP.NET 应用程序的详细信息,请访问
      http://go.microsoft.com/fwlink/?LinkId=169433
      -->
    <configuration>
      <connectionStrings>
        <add name="Mysqlserver" connectionString="server=WIN7U-20170517Z;uid=sa;pwd=zhangyukui283166;
             database=2018Study"/>
      </connectionStrings>
      <system.web>
        <compilation debug="true" targetFramework="4.5.2"/>
        <httpRuntime targetFramework="4.5.2"/>
        <httpModules>
          <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"/>
        </httpModules>
      </system.web>
      <system.codedom>
        <compilers>
          <compiler language="c#;cs;csharp" extension=".cs"
            type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
            warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
          <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
            type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
            warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=&quot;Web&quot; /optionInfer+"/>
        </compilers>
      </system.codedom>
      <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
        <modules>
          <remove name="ApplicationInsightsWebTracking"/>
          <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"
            preCondition="managedHandler"/>
        </modules>
      </system.webServer>
    </configuration>
  • 相关阅读:
    Atitit attilax要工作研究的要素 纪要 方案 趋势 方向 概念 理论
    Atitit 常见每日流程日程日常工作.docx v7 r8f
    Atitit it 互联网 软件牛人的博客列表
    Atitit 信息链(Information Chain)的概念理解 attilax总结
    Atitit 知识点的体系化 框架与方法 如何了解 看待xxx
    Atitit 聚合搜索多个微博 attilax总结
    Atitit 企业知识管理PKM与PIM
    Atitit 项目沟通管理 Atitit 沟通之道 attilax著.docx
    Atitit 项目管理软件 在线服务 attilax总结 1. 项目管理协作的历史 1 1.1. Worktile 406k 1 1.2. Teambition  584k in baidu
    Atitit.每周末总结 于每周一计划日程表 流程表 v8 import 上周遗漏日志补充 检查话费 检查流量情况 Crm问候 Crm表total and 问候
  • 原文地址:https://www.cnblogs.com/xiaoyaohan/p/9938816.html
Copyright © 2011-2022 走看看