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>
  • 相关阅读:
    QuickSort
    Java细节
    Java
    Prime
    apache和tomcat有什么不同,为什么要整合apache 和tomcat?
    java线程面试题及答案
    Struts2中的ModelDriven机制及其运用
    Java中instanceof关键字的用法总结
    spring特点与好处
    spring与struts有什么区别?
  • 原文地址:https://www.cnblogs.com/xiaoyaohan/p/9938816.html
Copyright © 2011-2022 走看看