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>
  • 相关阅读:
    Window 窗口类
    使用 Bolt 实现 GridView 表格控件
    lua的table库
    Windows编程总结之 DLL
    lua 打印 table 拷贝table
    使用 xlue 实现简单 listbox 控件
    使用 xlue 实现 tips
    extern “C”
    COleVariant如何转换为int double string cstring
    原来WIN32 API也有GetOpenFileName函数
  • 原文地址:https://www.cnblogs.com/xiaoyaohan/p/9938816.html
Copyright © 2011-2022 走看看