先来一组图,看看界面到是怎么样的吧
登录界面,做的相当搓,没做美工。笔者在之前的博文中也有说过,希望不要吐槽哈
管理员界面:
还有个非管理员的界面。 与管理员界面差不多,管理员是可以直接 编辑信息的,而非管理员就不行了。这里就不再赘述了。
再来聊聊 这个登录。
笔者使用的是access数据库。相信装了微软的 office 都有这个数据库的,除非你在安装office的时候 去掉了安装offence数据库的选项。
笔者先创建了一个数据库文件,里面有一张表就是存放登录用户信息的。是这样设计的:
当然, 笔者是事先在数据库里面写好了用户名和密码的, 就没有做注册了。
登录是这样做的:
1,先获取登录界面输入的信息并保存
2,再到数据库里面查询,是否存在用户,不存在,则报错如下:
思路大概就是这样了。看看关键代码吧。
/// <summary>
/// ----resetBtn 按钮事件, 清空输入框内的内容
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void resetBtn_Click(object sender, EventArgs e)
{
if (accountTextBox.Text != "" || psdTextBox.Text != "")
{
accountTextBox.Text = "";
psdTextBox.Text = "";
}
}
/// <summary>
/// ----登录按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void loginBtn_Click(object sender, EventArgs e)
{
///---查询语句
string accountStr = "select * from [login] where ID = '" + accountTextBox.Text + "' and PSD = '" + psdTextBox .Text+ "'";
DataSet ds = new DataSet();
///---!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
///---这里是使用的一个封装数据库操作的文件里面的一个函数。在博文的最后附上源码 与 链接地址
ds = AccessHelper.dataSet(accountStr);
///---判断查找是否成功
if (ds.Tables[0].Rows.Count > 0)
{
Session["userName"] = accountTextBox.Text;
Session["key"] = psdTextBox.Text;
///---跳转到管理员界面
if (accountTextBox.Text == "admin" && psdTextBox.Text == "admin")
{
Response.Redirect("admin.aspx");
}
else
{
Response.Redirect("customer.aspx");
}
}
else
{
///---登录失败
Response.Write("<script>alert('account or key is wrong')</script>");
///---重置出入框
accountTextBox.Text = "";
psdTextBox.Text = "";
}
}
要操作数据库, 记得加上 这个 命名空间:
using System.Data;
现在,我们再来聊聊这个
AccessHelper.dataSet()函数。
dataset()原型是:
public static DataSet dataSet(string sqlstr);
这里要传入一个string 类型的字符串, 这个字符串是关于数据库操作的字符串的,比如下面这样:
///---查询语句
string accountStr = "select * from [login] where ID = '" + accountTextBox.Text + "' and PSD = '" + psdTextBox .Text+ "'";
然后, 这个dataSet()函数将会返回一个DataSet 类型的 变量;返回的这个Dataset 变量里面包含了 上面accuntStr 里面对数据库操作的结果。这里, 若查找成功,ds.table[0].Rows.Count 是大于 0的。 也就是说可以判断ds.table[0] (第一张表)的行数判断是否是否在数据库文件内含有待查找的数据。笔者这里是写的查找,当然,你也可以尝试下其他的关于数据库的操作。 笔者在后面将会附上源码与链接地址。
再说说这个弹出错误对话框吧。笔者是这样做的:
Response.Write("<script>alert('account or key is wrong')</script>");
这样就不用自己额外定义错误窗口啦,(这是个偷懒的办法)
在上面的代码中,还有这个要说说:
Session["userName"] = accountTextBox.Text;
Session["key"] = psdTextBox.Text;
下面是W3C对Session的解释:
Session 对象
当您操作某个应用程序时,您打开它,做些改变,然后将它关闭。这很像一次对话(Session)。计算机知道您是谁。它清楚您在何时打开和关闭应用程序。但是在因特网上有一个问题:由于 HTTP 地址无法存留状态,web 服务器并不知道您是谁以及您做了什么。
ASP 通过为每位用户创建一个唯一的 cookie 的方式解决了这个问题。cookie 被传送至客户端,它含有可识别用户的信息。这种接口被称作 Session 对象。
Session 对象用于存储关于用户的信息,或者为一个用户的 session 更改设置。存储于 session 对象中的变量存有单一用户的信息,并且对于应用程序中的所有页面都是可用的。存储于 session 对象中的信息通常是 name、id 以及参数。服务器会为每个新的用户创建一个新的 Session,并在 session 到期时撤销掉这个 Session 对象。
Session["userName"] = accountTextBox.Text;
然后再跳转的新页面的Page_Load()函数里面这样写
if (Session["userName"] == null || Session["key"] == null)
{
Response.Redirect("login.aspx");
}
这里就在判断是否已经有用户登陆了,如果用户没有登录,那么,就将跳回到登陆界面。
AccessHelper真心好用,它封装了我们常操作数据库的一些函数。
下面是 上面代码中使用到的AccessHelper的源码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.Web;
public class AccessHelper
{
protected static OleDbConnection conn = new OleDbConnection();
protected static OleDbCommand comm = new OleDbCommand();
public AccessHelper()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 打开数据库
/// </summary>
private static void openConnection()
{
if (conn.State == ConnectionState.Closed)
{
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= "+HttpContext.Current.Server.MapPath("res\\DB\\stu133.mdb")+" ";
comm.Connection = conn;
try
{
conn.Open();
}
catch (Exception e)
{ throw new Exception(e.Message); }
}
}
/// <summary>
/// 关闭数据库
/// </summary>
private static void closeConnection()
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
conn.Dispose();
comm.Dispose();
}
}
/// <summary>
/// 执行sql语句
/// </summary>
/// <param name="sqlstr"></param>
public static void excuteSql(string sqlstr)
{
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
comm.ExecuteNonQuery();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{ closeConnection(); }
}
/// <summary>
/// 返回指定sql语句的OleDbDataReader对象,使用时请注意关闭这个对象。
/// </summary>
/// <param name="sqlstr"></param>
/// <returns></returns>
public static OleDbDataReader dataReader(string sqlstr)
{
OleDbDataReader dr = null;
try
{
openConnection();
comm.CommandText = sqlstr;
comm.CommandType = CommandType.Text;
dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
}
catch
{
try
{
dr.Close();
closeConnection();
}
catch { }
}
return dr;
}
/// <summary>
/// 返回指定sql语句的OleDbDataReader对象,使用时请注意关闭
/// </summary>
/// <param name="sqlstr"></param>
/// <param name="dr"></param>
public static void dataReader(string sqlstr, ref OleDbDataReader dr)
{
try
{
openConnection();
comm.CommandText = sqlstr;
comm.CommandType = CommandType.Text;
dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
}
catch
{
try
{
if (dr != null && !dr.IsClosed)
dr.Close();
}
catch
{
}
finally
{
closeConnection();
}
}
}
/// <summary>
/// 返回指定sql语句的dataset
/// </summary>
/// <param name="sqlstr"></param>
/// <returns></returns>
public static DataSet dataSet(string sqlstr)
{
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter();
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(ds);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
return ds;
}
/// <summary>
/// 返回指定sql语句的dataset
/// </summary>
/// <param name="sqlstr"></param>
/// <param name="ds"></param>
public static void dataSet(string sqlstr, ref DataSet ds)
{
OleDbDataAdapter da = new OleDbDataAdapter();
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(ds);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
}
/// <summary>
/// 返回指定sql语句的datatable
/// </summary>
/// <param name="sqlstr"></param>
/// <returns></returns>
public static DataTable dataTable(string sqlstr)
{
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter();
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(dt);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
return dt;
}
/// <summary>
/// 返回指定sql语句的datatable
/// </summary>
/// <param name="sqlstr"></param>
/// <param name="dt"></param>
public static void dataTable(string sqlstr, ref DataTable dt)
{
OleDbDataAdapter da = new OleDbDataAdapter();
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(dt);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
}
/// <summary>
/// 返回指定sql语句的dataview
/// </summary>
/// <param name="sqlstr"></param>
/// <returns></returns>
public static DataView dataView(string sqlstr)
{
OleDbDataAdapter da = new OleDbDataAdapter();
DataView dv = new DataView();
DataSet ds = new DataSet();
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(ds);
dv = ds.Tables[0].DefaultView;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
return dv;
}
}