在一个网站 应用系统 里,系统管理员拥有管理用户的权限。在本登录模块里,让管理员有查询用户的信息权限。

界面设计
在登录界面,如果系统发现登录用户的权限是“管理员”,则跳转进入后台管理员管理模块。在这个模块里,管理员可以输入“用户名”或“用户昵称”,单击“查找”按钮查询用户信息,查询结果用gridview显示。按照图4-8所示设计界面。

图4-8 后台管理员界面
表4-6列出了后台管理员界面里各主要控件的类型和功能。
控 件 ID控 件 类 型功 能 描 述
Label2Label用来显示“用户名” 字符
Label4Label用来显示“用户昵称”字符
tbxUserNameTextBox(textMode是SingleLine)用来接收输入的“用户名” 值
tbxNickNameTextBox(textMode是SingleLine)用来接收输入的“用户昵称” 值
btnSearchbutton查找按钮
gvUserSearcgridview用于显示查询到的用户信息
业务逻辑设计
按以下步骤编写Manager.aspx的业务逻辑设计代码。
(1) 双击Manager.aspx窗体的空白处,进入相应的逻辑代码文件Manager.aspx.cs。同样在该文件的顶端,添加数据库访问引用的命名空间语句。
using System.Data.SqlClient;
并在class的开头添加连接数据库的字符串定义。
private static string strConnect =System.Configuration.ConfigurationManager.AppSettings["connStr"];
(2) 在Manager.aspx的设计里,双击“查找”按钮,进入按钮的事件处理函数。该函数的代码如下。
// 单击查找事件
protected void btnSearch_Click(object sender, EventArgs e)
{
// 数据库连接
SqlConnection objConnection = new SqlConnection(strConnect);
// 数据库命令
SqlCommand objCommand = new SqlCommand("", objConnection);
// 设置Sql语句,多表连接,获取用户权限
// 这里有个小技巧:在where从句里,查询条件或有或无
// 所以使用where 1=1 这样的语句,避免因无查询条件而带来的错误
objCommand.CommandText =" SELECT USERS.USERNAME, USERS.NICKNAME,USERS.USEREMAIL, USERROLE.ROLENAME " +" FROM USERS " + " LEFT JOIN USERROLEON USERS.USERROLE = USERROLE.ROLELEVEL " +" WHERE 1=1 ";
if (tbxUserName.Text != "")
objCommand.CommandText += " AND USERS.USERNAME LIKE @USERNAME";
if (tbxNickName.Text != "")
objCommand.CommandText += " AND USERS.NICKNAME LIKE @NICKNAME";
// 设置Sql语句参数类型
objCommand.Parameters.Add("USERNAME", SqlDbType.VarChar);
objCommand.Parameters.Add("NICKNAME", SqlDbType.VarChar);
// Sql语句参数赋值
objCommand.Parameters["USERNAME"].Value = "%" + tbxUserName.Text.Trim() + "%";
objCommand.Parameters["NICKNAME"].Value = "%" + tbxNickName.Text.Trim() + "%";
//这里使用DataAdapter和DataSet获取数据
DataSet objDataset = new DataSet();
SqlDataAdapter objAdapter = new SqlDataAdapter(objCommand);
try
{
// 打开数据库连接
if (objConnection.State == ConnectionState.Closed)
{
objConnection.Open();
}
// 数据填充
objAdapter.Fill(objDataset, "UserSearch");
}
catch (SqlException exp)
{
Session["Error"] = exp.Message;
Response.Redirect("Error.aspx");
}
finally
{
// 关闭数据库连接
if (objConnection.State == ConnectionState.Open)
{
objConnection.Close();
}
}
// 设置数据源
gvUserSearch.DataSource = objDataset.Tables["UserSearch"];
// 绑定数据源
gvUserSearch.DataBind();
}
这段代码的主要业务逻辑是:根据管理员输入的用户名和用户昵称信息,从数据库中查询相应的用户,并在gridview控件中显示查询到的数据结果。这段代码里关于获得连接、创建Command对象和执行查询等方法同用户登录模块中的数据操作方法雷同,但使用了DataAdpater和DataSet获取数据。
使用DataAdapter和DataSet对象获取数据的主要步骤如下。
(1) 创建连接和命令对象,并使用连接对象连接到数据源。
(2) 填充命令对象。这里查询的SQL语句的主干是:SELECT USERS.USERNAME, USERS.NICKNAME, USERS.USEREMAIL, USERROLE.ROLENAME FROM USERS LEFT JOIN USERROLE ON USERS.USERROLE = USERROLE. ROLELEVEL,后面再加上输入的用户名和用户昵称。通过两张表的连接,把用户的用户名、用户昵称和用户权限查询出来。
(3) 使用SqlDataAdapter objAdapter = new SqlDataAdapter(objCommand)语句,根据Command对象创建DataAdapter对象。
(4) 使用objAdapter.Fill(objDataset, "UserSearch");语句(这里UserSearch是数据表名)将查询结果填充到DataSet对象中。
另外,在本界面里还用到了gridview对象来显示查询结果。通过gvUserSearch.DataSource = objDataset.Tables["UserSearch"]语句来设置gridview的数据源,通过gvUserSearch.DataBind ()来绑定数据源。这样,由于有了绑定关系,一旦使用SqlDataAdapter