一般处理程序通常实现IHttpHandler接口,ashx效率比较高效,webform(aspx)比较消耗资源,mvc效率刚好介于两者之间
一般处理程序处理过程(HttpHandler)
IIS处理不了这种后缀程序通过映射表将该程序传递给ASPNET_ISAPI.DLL的程序,然后又将请求转给了网站程序
网站程序调用HttpRuntime类的静态方法处理请求,有以下步骤:
1,实现System.Web.IHttpHandle特殊接口的类
实现了该接口的类都能作为一个外部请求的目标程序
2,创建 HttpContext context 数据上下文对象,用于处理请求的所以参数数据.
(主要是httpRequest-->用于Form表单数据url 参数 和httpResponse()主要包含了FileStream对象用于保存输出的数据)
3,分析请求报文,并将数据封装到HttpWorkerRequest对象对应的属性
并调用HttpApplicationFactory的类中的静态方法来创建HttpApplication对象
(实际上是先通过httpApplication池 看有没有空闲的 没有才创建),那么
该对象会处理此次请求的所有运行过程
4,httpContex对象传入到httpApplication的时候就可以调用页面类中的ProcessRequest方法
好了一般处理程序就说到这里吧!
开始我来实现我的简单三层
第一步我首先搭建了DAL层(数据访问层)
因为是直接与数据库发生关系的,所以我新建了一个HelperSQL.cs类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace StudentManagement.DAL { //需要系统配置;系统设定;系统设置;查看系统配置程序集
using System.Configuration; using System.Data.SqlClient; using System.Data; public class HelperSQL { //在ui的配置文件中配置AppSettings
public static string str = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]; private static SqlConnection connection; public static SqlConnection Connection { get { //判断是否有这个连接没有
if (connection == null) { //创建连接
connection = new SqlConnection(str); //打开连接
connection.Open(); } //判断连接是否是关闭的
else if(connection.State==System.Data.ConnectionState.Closed){ //打开连接
connection.Open(); } //判断连接是否中断
else if (connection.State == System.Data.ConnectionState.Broken) { //先关闭连接
connection.Close(); //打开连接
connection.Open(); } //返回连接
return connection; } } public static int ExecuteCommand(string strsql) { //传入数据库命令和连接
SqlCommand sqlcmd = new SqlCommand(strsql, Connection); //执行语句返回受影响的行数
int result = sqlcmd.ExecuteNonQuery(); return result; } public static int ExecuteCommand(string str, params SqlParameter[] values) { //传入数据库命令和连接
SqlCommand sqlcmd = new SqlCommand(str, Connection); //增加参数
sqlcmd.Parameters.AddRange(values); return sqlcmd.ExecuteNonQuery(); } public static DataSet GetDataSet(string str) { //创建一个内存缓存
DataSet ds = new DataSet(); //传入命令和连接
SqlCommand sqlcmd = new SqlCommand(str,Connection); //创建一个桥接器
SqlDataAdapter sqlda = new SqlDataAdapter(sqlcmd); //写入内存
sqlda.Fill(ds); //返回
return ds; } public static DataSet GetDataSet(string str, params SqlParameter[] values) { //创建一个内存缓存
DataSet ds = new DataSet(); //传入命令和连接
SqlCommand sqlcmd = new SqlCommand(str, Connection); //增加参数
sqlcmd.Parameters.AddRange(values); //打开桥连接
SqlDataAdapter sqlda = new SqlDataAdapter(sqlcmd); //写入到内存
sqlda.Fill(ds); //返回
return ds; } public static DataSet StoredProcedure(string strName, params IDataParameter[] parmenters) { using (SqlConnection connection = new SqlConnection(str)) { //创建一个内存缓存
DataSet ds = new DataSet(); //创建一个桥连接
SqlDataAdapter sqlda = new SqlDataAdapter(); //告诉桥连接这个是存储过程
sqlda.SelectCommand = StoredProcedureCommand(connection, strName, parmenters); //写入内存
sqlda.Fill(ds); //返回
return ds; } } private static SqlCommand StoredProcedureCommand(SqlConnection sqlcc, string strName, IDataParameter[] parmenters) { //传入存储过程名称和连接数据库命令
SqlCommand sqlcmd = new SqlCommand(strName, sqlcc); //告诉数据库这个是存储过程
sqlcmd.CommandType = CommandType.StoredProced