项目结构
BLL(业务员逻辑) DAO(DAO组件) DBUtlity(提供数据库的基本操作) Entity(实体层,类似JavaBean) Web(WEb层)
1.从最简单的登录界面开始
Login.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="Web.Admin.WebForm1" %>
<!--编译指令,使用c#编写代码 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
function checkName(name) {
if (name == "") {
document.getElementById("checkName").innerHTML = "名称不能空";
} else {
document.getElementById("checkName").innerHTML = "";
}
}
function checkPassword(psd) {
if (psd == "") {
document.getElementById("checkPassword").innerHTML = "密码不能空";
} else {
document.getElementById("checkPassword").innerHTML = "";
}
}
function checkInput() {
var Name = document.getElementById("tbyhmc");
var Psd = document.getElementById("tbyhmm");
if (!Name.value) {
alert(" 用户名不能空");
return false;
}
if (!Psd.value) {
alert("密码不能空");
return false;
}
return true;
}
</script>
<style type="text/css">
.style1
{
width: 36%;
}
.style2
{
width: 20%;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div style="height: 100%">
<div style=" text-align:right;margin-top:200px; margin-bottom:10px; height: 72px; border-top:1px solid #aaa;">
<div style="width:506px; height:30px; margin-top:40px; margin-left:auto; margin-right:auto;">
<a style=" font-family:华文隶书; font-weight:bolder;font-size:xx-large; margin-top:30px;">农业科技产出分析与学科评价系统</a>
</div>
</div>
<div style=" width:inherit;height: 194px; border-bottom:1px solid #aaa;
background-image:url(../Images/loginbackground.jpg);background-repeat:repeat-x;">
<div style=" width:266px; height:128px; margin-left:auto; margin-right:auto;">
<table style="height:120pt; width:357pt; ">
<tr>
<td class="style2">
<asp:Label ID="Label1" runat="server" Text="用户名称:"></asp:Label><!-- 服务器控件 -->
</td>
<td class="style1">
<asp:TextBox ID="tbyhmc" runat="server" οnblur="checkName(this.value)"
Width="161px"></asp:TextBox>
</td>
<td>
<label id="checkName" style=" font-family:'华文行楷'"></label>
</td>
</tr>
<tr>
<td class="style2">
<asp:Label ID="Label2" runat="server" Text="用户密码:"></asp:Label>
</td>
<td class="style1">
<asp:TextBox ID="tbyhmm" runat="server" οnblur="checkPassword(this.value)"
TextMode="Password" Width="160px"></asp:TextBox>
</td>
<td>
<label id="checkPassword" style=" font-family:'华文行楷'">
</label>
</td>
</tr>
<tr>
<td class="style2">
</td>
<td class="style1"><!--WEB 控件 类似html元素 具备一些只有ASP.NET才能使用的其他功能 -->
<asp:Button ID="Button1" runat="server" οnclick="Button1_Click" Text="登 录"
Width="68px" OnClientClick="checkInput()" />
<asp:Button ID="Button2" runat="server" CausesValidation="False"
οnclick="Button2_Click" Text="取 消" Width="66px" />
</td>
<td>
<asp:Label ID="Label3" runat="server" Text=""></asp:Label>
</td>
</tr>
<tr>
<td class="style2">
</td>
<td class="style1">
</td>
<td>
</td>
</tr>
</table>
</div>
</div>
</form>
</body>
</html>
Login.aspx.cs
namespace Web.Admin
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.Label3.Text = "用户名或密码错误!";
}
protected void Button1_Click(object sender, EventArgs e)
{
string userName = this.tbyhmc.Text;
string userPassword = this.tbyhmm.Text;
UserManager checkUser = new UserManager();
if (checkUser.Login(userName, userPassword) != null)
{
Session["user"] = new user { UserName = userName, UserPassword = userPassword };
Response.Redirect("../MasterForm.aspx");
}
else
{
this.Label3.Text = "用户名或密码错误!";
}
}
protected void Button2_Click(object sender, EventArgs e)
{
Response.Redirect("../MasterForm.aspx");
}
}
}
UserManger【BLL】
namespace BLL.Function
{
public class UserManager
{
/// <summary>
/// 用户登录
/// </summary>
/// <param name="name">用户名</param>
/// <param name="pwd">密码</param>
/// <returns>管理员对象信息</returns>
public user Login(string name, string pwd)
{
return DbAccess.CreateUser().Login(name, pwd);
}
/// <summary>
/// 修改密码
/// </summary>
/// <param name="adminName">用户名称</param>
/// <param name="newPwd">新密码</param>
/// <param name="oldPwd">旧密码</param>
/// <returns>修改成功</returns>
public int ChangePwd(user oldInfo, string newPwd)
{
return DbAccess.CreateUser().ChangePwd(oldInfo, newPwd);
}
}
}
namespace DAO.Impl.Function
{
public class UserDb : IUser
{
private const string PARA_USERNAME = "@USERNAME";
private const string PARA_USERPASSWORD = "@USERPASSWORD";
private const string PARA_USERNEWPASSWORD = "@PARA_USERNEWPASSWORD";
private const string SQL_QUERYBYNAME = "SELECT USERNAME,USERPASSWORD FROM TB_YH WHERE USERNAME=@USERNAME AND USERPASSWORD=@USERPASSWORD";
private const string SQL_UPDATE = "UPDATE TB_YH SET USERNAME=@USERNAME,USERPASSWORD=@PARA_USERNEWPASSWORD WHERE USERNAME=@USERNAME AND USERPASSWORD=@USERPASSWORD";
/// <summary>
/// 用户登录
/// </summary>
/// <param name="name">用户名</param>
/// <param name="pwd">密码</param>
/// <returns>管理员对象信息</returns>
public user Login(string name, string pwd)
{
user loginUser = null;
// 声明参数数组并赋值
SqlParameter[] _param =
{
new SqlParameter(PARA_USERNAME, SqlDbType.VarChar,32), //动态绑定参数
new SqlParameter(PARA_USERPASSWORD, SqlDbType.VarChar,16)
};
_param[0].Value = name;
_param[1].Value = pwd;
/*
* /// <param name="connection">数据库连接</param>
/// <param name="commandText">SQL语句</param> CommandType.Text代表执行的是SQL语句
/// <param name="parms">查询参数</param>
/// <returns>返回只读数据集</returns>
*
*
*/
using (SqlDataReader dr = SqlHelper.ExecuteReader(DbConnectString.ConnectionString, CommandType.Text, SQL_QUERYBYNAME, _param))
{
while (dr.Read())
{
loginUser = GetEntityClasFromDataReader(dr);
}
}
return loginUser;
}
#region IDataReader转换成实体
/// <summary>
/// 得到 user 数据实体
/// </summary>
/// <param name="dr">dr</param>
/// <returns>实体类</returns>
private user GetEntityClasFromDataReader(IDataReader dr)
{
user Obj = new user();
Obj.UserName = dr["USERNAME"].ToString();
Obj.UserPassword = dr["USERPASSWORD"].ToString();
return Obj;
}
#endregion
/// <summary>
/// 修改密码
/// </summary>
/// <param name="adminName">用户名称</param>
/// <param name="newPwd">新密码</param>
/// <param name="oldPwd">旧密码</param>
/// <returns>修改成功</returns>
public int ChangePwd(user oldInfo, string newPwd)
{
// 声明参数数组并赋值
SqlParameter[] _param =
{
new SqlParameter(PARA_USERNAME, SqlDbType.VarChar,32),
new SqlParameter(PARA_USERPASSWORD, SqlDbType.VarChar,16),
new SqlParameter(PARA_USERNEWPASSWORD, SqlDbType.VarChar,16)
};
_param[0].Value = oldInfo.UserName;
_param[1].Value = oldInfo.UserPassword;
_param[2].Value = newPwd;
// 返回
return SqlHelper.ExecuteNonQuery(DbConnectString.ConnectionString, CommandType.Text, SQL_UPDATE, _param);
}
}
}
3.using语句,定义一个范围,在范围结束时处理对象。
场景:
当在某个代码段中使用了类的实例,而希望无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose。
要达到这样的目的,用try...catch来捕捉异常也是可以的,但用using也很方便。