BasePage

来源:互联网 发布:网络电视上如何看直播 编辑:程序博客网 时间:2024/04/30 13:10

摘要:本文描述了在用VS.NET进行B/S开发时采用的框架结构,一般建立类库项目和Web项目,在Web基本aspx页面类中调用类库中方法,同时在aspx页面类中不需要写任何对数据库操作的SQL代码,便于分层开发和代码维护。

1、概述

使用微软Visual Studio .NET进行B/S或者C/S结构应用程序开发,为了使软件分层开发和易维护原则,将整个项目框架分为类库和应用程序两个项目。在应用程序中调用类库中相应类的方法,这样对于应用程序开发和类库开发可以同步进行,同时,类库中相应方法内容的修改不会影响应用程序调用。在应用程序和类库交互过程中,方法参数尽量采用对象进行传递。在B/S结构中,应用程序为Web程序。

在类库中分为两种类,一种为实体类,主要是和数据库对应的字段属性;另一种为操作类,主要包括对此实体对象的增加、修改、查询、删除操作。在实体类中也定义对于异常的处理,这样,在操作类中就可以在数据库操作底层捕获具体增删改查异常。

在Web应用程序中,使用一个具体类BasePage,让其继承Web窗体页System.Web.UI.Page,此类封装对session操作,这样每一个Web窗体页只要继承BasePage就可以进行页面验证,不需要每一个页面都进行Session操作。

2、类库项目

类库主要是编写各种类,以便供Web应用程序调用。类库包括实体类和操作类。

(1)实体类

每一个类定义数据库中对应字段,便于在操作类中调用时,可以将对象传递给操作类方法。同时对每一个成员变量使用get和set操作,以便获取对象属性值或者给对象属性赋值。

  1. 例1:用户信息实体类
     public class USERINFO    {        private int uid;//用户ID        private string name;//用户名称        private string pass;// 用户密码        public USERINFO()        { uid = 0;  name = "";  pass = "";}        public int UID        {   get{  return uid; }            set { uid = value; }        }        public string NAME        { get { return name; }            set{ value.Trim();name = value; }           }        public string PASS        { get{ return pass; }            set{ value.Trim();pass = value; }           }    }
  2. 例2:异常处理实体类
     public class EdException : System.Exception    {        private int m_nCode;// 异常相关代码        private string m_sMessage;// 异常相关消息        public EdException(string message)        { m_nCode = 0;  m_sMessage = message; }        public int Code        { get { return m_nCode; }            set{ m_nCode = value; }        }        public new string Message        {  get{ return m_sMessage; }            set{ m_sMessage = value; }          }    }

    (2)操作类

    操作类主要对实体类中定义对象进行新增,修改,查询和删除操作。其中新增和修改方法参数为实体类对象。

  3. 例:用户操作类
    public class PerUser{private SqlConnection m_Conn;public PerUser(SqlConnection Conn){ m_Conn = Conn; }public SqlConnection GetSqlConnection()// 获取数据库连接{ if(m_Conn == null){m_Conn = new SqlConnection(ConnectionString);return m_Conn;}else {return m_Conn;}}public int f_insUSER(USERINFO user) // 新增用户信息{    int line = 0; // 返回新增种子号    SqlConnection conn = GetSqlConnection();   try   {       string strSql = "";       strSql="insert into user_info(userAccount,userPwd)    values(@userAccount,@userPwd);"             +" SELECT SCOPE_IDENTITY()";       SqlCommand cmd = new SqlCommand(strSql, conn);       cmd.Parameters.Add("@userAccount", SqlDbType.VarChar);//参数       cmd.Parameters["@userAccount"].Value = user.NAME;//给参数赋值       cmd.Parameters.Add("@userPwd", SqlDbType.VarChar);//参数       cmd.Parameters["@userPwd"].Value = user.PASS;//给参数赋值       conn.Open();//打开连接line = int.Parse(cmd.ExecuteScalar().ToString());//返回生成的新种子号码    }catch (SqlException se)    {       EdException we = new EdException("新增个人用户操作失败," + se.Message);       throw we;    }    finally { conn.Close();//关闭连接}     return line;  }}

3、Web项目

在Web应用程序中,定义页面基类BasePage,在此类中封装了对于数据库连接,以及Session验证操作,所有基本页面类均继承此基类,这样在需要验证才能访问的页面,只要继承这个页面就可以拿到数据库连接,以及调用相应方法进行Session验证。

(1)BasePage类

public class BasePage:Page{    private static readonly string ses_name = "_Auth_Session";    private USERINFO m_ui;    private string m_connString;    private SqlConnection m_conn;    public BasePage()    {        this.m_connString = Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;        this.m_conn = new SqlConnection(this.m_connString);    }    public SqlConnection GetSqlConnection()    { return new SqlConnection(this.m_connString); }    // 当前登录用户帐号信息对象    public USERINFO currUserInfo    { get{ return this.m_ui; }   }    protected override void OnInit(EventArgs e)    {//验证页面访问权限        try         { this.m_ui = new USERINFO();            this.InitSessionUser();        }        catch (EdException we)        { Response.Write(we.Message + "[" + we.Code.ToString() + "]");}        base.OnInit(e);    }    private void InitSessionUser()    {        object auth = this.Session[ses_name];        if (auth == null)        { this.m_ui = new USERINFO();            this.Session[ses_name] = this.m_ui;        }        else { this.m_ui = (USERINFO)auth; }    }    protected bool sessioncheck()    {        bool flag = false;        try        { if (this.currUserInfo.NAME.Length > 0 && this.currUserInfo.UID > 0)            { flag = true; }            else            { flag = false; }        } catch { flag = false; }        return flag;    }}

(2)基本aspx页面

例:新增用户页面InserUser.aspx,对应代码页面为InserUser.aspx.cs

public partial class InserUser: BasePage  //继承基类页面,进行验证处理{    protected void Page_Load(object sender, EventArgs e)    {// 判断是否登录        if (!this.sessioncheck())        { Response.Redirect("Default.aspx");}}    protected void BtnIns_Click(object sender, EventArgs e){    try       {             PerUser m_peruser = new PerUser(this.GetSqlConnection());             USERINFO userinfo = new USERINFO ();             userinfo.USER = this.TxtName.Text; //用户名             userinfo.PASS = this.TxtPwd.Text; //密码             int line = m_peruser.f_insUSER(userinfo);             lblinfo.Text = "你是第"+line.ToString()+"位用户";        }        catch (EdException we)        { lblinfo.Text = we.Message; }}}

(3)给Session赋值

在用户登录页面,进过数据库查询判断,如果用户是系统用户,则登录成功后,将用户信息对象封装到Session中。

//将用户信息放入Session中USERINFO   m_ui = new USERINFO();m_ui.UID = id;m_ui.NAME = this.TxtName.Text;m_ui.PASS = this.TxtPwd.Text;HttpContext.Current.Session["_Auth_Session"] = m_ui; //将用户信息放入Session中

4、配置文件

将数据库连接信息配置到Web.config,以方便修改。

<?xml version="1.0"?><configuration>  <connectionStrings>    <add name="ConnectionString" connectionString="Data Source=.;Initial Catalog=DbAuc;User ID=test;Password=123456"/>  </connectionStrings>  </configuration>
原创粉丝点击