建立使用者表的Sql語句,資料庫為SQL Server2000:
create table "User" (<br /> UserID int not null,<br /> UserName varchar(50) null,<br /> UserPwd varchar(50) null,<br /> UserCode varchar(50) null,<br /> UserRole varchar(50) null,<br /> CreatTime datetime null default getdate(),<br /> UpdateTime datetime null default getdate(),<br /> Define1 varchar(50) null,<br /> Define2 varchar(50) null,<br /> constraint PK_USER primary key nonclustered (UserID)<br />)<br />go
1.使用者登入功能的實現:
已經使用LiTianPing的動軟代碼產生器產生了三層架構,以下是添加的代碼。
(1)DAL層的User.cs中添加兩個方法:
/// <summary><br /> /// 使用者登入<br /> /// </summary><br /> /// <param name="userName"></param><br /> /// <param name="password"></param><br /> /// <returns></returns><br /> public HJMS.Model.User CheckUser(string userName,string password)<br /> {<br /> HJMS.Model.User userInfo=new Model.User();<br /> int num = 0;string str = "";<br /> StringBuilder strSql = new StringBuilder();<br /> strSql.Append(" select top 1 UserID,UserName,UserPwd from User");<br /> strSql.Append(" where UserName=@UserName");<br /> SqlParameter[] pt = {new SqlParameter("@UserName", SqlDbType.VarChar),};<br /> pt[0].Value = userName.ToLower();<br /> using(SqlDataReader reader=DbHelperSQL.ExecuteReader(strSql.ToString(),pt))<br /> {<br /> if(reader.Read())<br /> {<br /> num = reader.GetInt32(0);<br /> str = reader[2].ToString();<br /> }<br /> }<br /> if(num!=0)<br /> {<br /> if(str==password)<br /> {<br /> userInfo.UserPwd = password;<br /> StringBuilder strSql2 = new StringBuilder();<br /> strSql.Append(" select top 1 UserID,UserName,UserPwd,UserCode,UserRole,CreatTime,UpdateTime,Define1,Define2 from User");<br /> strSql.Append(" where UserID=@UserID");<br /> SqlParameter[] parameters2 = {new SqlParameter("@PerID", SqlDbType.Int,4)};<br /> parameters2[0].Value = num;<br /> using (SqlDataReader reader2 = DbHelperSQL.ExecuteReader(strSql2.ToString(), parameters2))<br /> {<br /> if (reader2.Read())<br /> {<br /> userInfo.UserID = reader2[0] == null ? 0 : reader2.GetInt32(0);<br /> userInfo.UserName = reader2[1].ToString();<br /> userInfo.UserCode = reader2[3].ToString();<br /> userInfo.UserRole = reader2[4].ToString();<br /> userInfo.CreatTime = reader2.GetDateTime(5);<br /> userInfo.UpdateTime = reader2.GetDateTime(6);<br /> userInfo.Define1 = reader2[7].ToString();<br /> userInfo.Define2 = reader2[8].ToString();</p><p> }<br /> }<br /> }<br /> }<br /> return userInfo;<br /> }</p><p> /// <summary><br /> /// 根據使用者名稱獲得使用者實體<br /> /// </summary><br /> /// <param name="userName"></param><br /> /// <returns></returns><br /> public HJMS.Model.User GetModelByUserName(string userName)<br /> {<br /> StringBuilder strSql = new StringBuilder();<br /> strSql.Append(" select top 1 UserID,UserName,UserPwd,UserCode,UserRole,CreatTime,UpdateTime,Define1,Define2 from User");<br /> strSql.Append(" where UserName=@UserName");<br /> SqlParameter[] pt = {new SqlParameter("@UserName", SqlDbType.VarChar)};<br /> pt[0].Value = userName;<br /> HJMS.Model.User user = new Model.User();<br /> DataTable dtUser = DbHelperSQL.Query(strSql.ToString(), pt).Tables[0];<br /> if (dtUser.Rows.Count > 0)<br /> {<br /> if (dtUser.Rows[0]["UserID"].ToString() != "")<br /> {<br /> user.UserID = int.Parse(dtUser.Rows[0]["UserID"].ToString());<br /> }<br /> user.UserName = dtUser.Rows[0]["UserName"].ToString();<br /> user.UserPwd = dtUser.Rows[0]["UserPwd"].ToString();<br /> user.UserCode = dtUser.Rows[0]["UserCode"].ToString();<br /> user.UserRole = dtUser.Rows[0]["UserRole"].ToString();<br /> user.CreatTime = Convert.ToDateTime(dtUser.Rows[0]["CreateTime"]);<br /> user.UpdateTime = Convert.ToDateTime(dtUser.Rows[0]["UpdateTime"]);<br /> user.Define1 = dtUser.Rows[0]["Define1"].ToString();<br /> user.Define2 = dtUser.Rows[0]["Define2"].ToString();<br /> return user;<br /> }<br /> else<br /> {<br /> return null;<br /> }<br /> }
(2) BLL層的User.cs中添加兩個方法:
/// <summary><br /> /// 使用者登入<br /> /// </summary><br /> /// <param name="userName"></param><br /> /// <param name="password"></param><br /> /// <returns></returns><br /> public HJMS.Model.User CheckUser(string userName, string password)<br /> {<br /> return dal.CheckUser(userName, password);<br /> }<br /> /// <summary><br /> /// 根據使用者名稱獲得使用者實體<br /> /// </summary><br /> /// <param name="userName"></param><br /> /// <returns></returns><br /> public HJMS.Model.User GetModelByUserName(string userName)<br /> {<br /> return dal.GetModelByUserName(userName);<br /> }<br />
(3)UI層就是使用者介面,假設Login.aspx如下的話:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %><br /><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><br /><html xmlns="http://www.w3.org/1999/xhtml"><br /><head runat="server"><br /> <title>系統登入</title><br /> <mce:script language="javascript"><!--<br /> function SetFocus() {<br /> document.all.txtUserID.focus();<br /> }</p><p>// --></mce:script><br /></head><br /><body onload="SetFocus()" style="background-color: White;" mce_style="background-color: White;"><br /> <form id="form1" runat="server"><br /> <table cellspacing="0" cellpadding="3" border="0" align="center" width="530px" style="margin-top: 200px;" mce_style="margin-top: 200px;"><br /> <tr><br /> <td style="width: 525px; height: 310px; background: url(images/background/loginbackground2.jpg) no-repeat;<br /> vertical-align: top;"><br /> <div style="text-align: right; margin-right: 20px;" mce_style="text-align: right; margin-right: 20px;"><br /> <div style=" text-align: left;width: 218px; height: 19px; margin-top:15px; margin-right:20px"><br /> <asp:Label ID="lblTitle" runat="server" Text="戶籍管理系統" Font-Bold="true" Font-Size="Small" Font-Names="宋體"></asp:Label><br /> </div></div><br /> <div id="userloginbox" style="margin: 0px 30px;" mce_style="margin: 0px 30px;"><br /> <table cellpadding="5px;" width="450px"><br /> <tr><br /> <td colspan="2"><br /> <br /> </td><br /> </tr><br /> <tr><br /> <td align="right" width="50%"><br /> <asp:Label ID="Label2" runat="server">使用者名稱:</asp:Label><br /> </td><br /> <td><br /> <asp:TextBox ID="txtUserID" runat="server" Width="150px" MaxLength="10" class="username"<br /> EnableTheming="false"></asp:TextBox><br /> </td><br /> </tr><br /> <tr><br /> <td align="right"><br /> <asp:Label ID="Label3" runat="server">密 碼:</asp:Label><br /> </td><br /> <td><br /> <asp:TextBox ID="txtPwd" runat="server" TextMode="Password" Width="150px" MaxLength="20"<br /> class="password" EnableTheming="false"></asp:TextBox><br /> </td><br /> </tr><br /> <tr><br /> <td><br /> <br /> </td><br /> <td><br /> <asp:Button ID="btnLogin" runat="server" Text="登 錄" OnClick="btnLogin_Click"></asp:Button> </p><p> </td><br /> </tr><br /> <tr><br /> <td colspan="2" style="height: 20px;"><br /> <asp:Label ID="lblMessage" runat="server" EnableViewState="False"></asp:Label><br /> </td><br /> </tr><br /> <tr><br /> <td colspan="2" align="right"><br /> IE (<asp:Label ID="lblVersion" runat="server" Text="版本 6.0"></asp:Label>) <br /> </td><br /> </tr><br /> </table><br /> </div><br /> </td><br /> </tr><br /> </table><br /> <br /><br /> <br /><br /> </form><br /></body><br /></html><br />
那麼Login.aspx.cs頁面就可以這樣:
public partial class Login : System.Web.UI.Page<br />{<br /> private HJMS.BLL.User userBll = new HJMS.BLL.User();<br /> protected void Page_Load(object sender, EventArgs e)<br /> {<br /> }<br /> protected void btnLogin_Click(object sender, EventArgs e)<br /> {<br /> HJMS.Model.User UserInfo = userBll.CheckUser(txtUserID.Text.Trim(), txtPwd.Text.Trim());<br /> if(UserInfo!=null&&UserInfo.UserID!=0)<br /> {<br /> HttpCookie cookie = FormsAuthentication.GetAuthCookie(UserInfo.UserName, true);<br /> cookie.Expires = DateTime.Now.AddDays(7);<br /> Response.Cookies.Add(cookie);<br /> if(Request.QueryString["ReturnUrl"]!=null)<br /> {<br /> Context.Response.Redirect(Request.QueryString["ReturnUrl"]);// 重新導向到使用者申請的初始頁面<br /> }<br /> else<br /> {<br /> Response.Redirect("Admin/Navigator.aspx");<br /> }<br /> }<br /> else<br /> {<br /> Page.ClientScript.RegisterStartupScript(Page.GetType(),"Fails","alert('使用者名稱或密碼錯誤!');",true);<br /> }<br /> }<br />}