17.4 搭建系统数据库
开发数据库管理信息系统需要选择后台数据库和相应的数据库访问接口。后台数据库的选择需要考虑用户需求、系统功能和性能要求等因素。考虑到本系统所要管理的数据量比较大,且需要多用户同时运行访问,所以笔者使用SQL Server 2005作为后台数据库管理平台,因为这个版本是当前最普及的版本。选择好数据库工具,具体用什么访问技术变得十分重要,因为它决定了整个项目的访问效率。应用程序的开发采用目前比较流行的ADO数据库访问技术,并将每个数据库表的字段和操作封装到相应的类中,使应用程序的各个窗体都能够共享对表的操作,而不需要重复编码,使程序更加易于维护,从而将面向对象的程序设计思想成功应用于应用程序设计中,这也是本系统的优势和特色。
17.4.1 数据库设计
本项目的数据库命名为“deng”,由登录用户信息表“User”构成。User的具体设计结构如表17-1所示。
表17-1 登录用户信息表
字 段 名 称 |
数 据 类 型 |
是 否 主 键 |
默 认 值 |
功 能 描 述 |
---|---|---|---|---|
ID |
int |
是 |
递增1 |
编号 |
Username |
varchar(50) |
否 |
Null |
用户名 |
Password |
varchar(255) |
否 |
Null |
密码 |
Status |
tinyint |
否 |
Null |
标识状态 |
17.4.2 数据库访问层设计
本系统应用程序的数据库访问层由文件User.cs实现,其主要功能是建立UserDAL类,获取配置文件的数据库连接字符串,并检测数据库中的相关数据,对数据库中的数据进行相关处理。
文件User.cs的具体实现过程如下。
1.定义UserDAL类
UserDAL类的功能是声名只读变量ConnectionStrings,获取数据库的连接字符串。其对应的实现代码如下。
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
namespace ASPNETAJAXWeb.AjaxUser
{ /// 操作用户信息的数据访问层
public class UserDAL
{
/// 保存数据库的连接字符串
private readonly string ConnectionString=ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].
ConnectionString;
public UserDAL()
{
///
}
2.注册处理方法
注册模块最主要的功能是实现注册数据的验证和新注册数据的添加。上述功能由方法CheckUser和AddUser实现。其中,CheckUser方法的功能是监测userneme参数指定的名称是否已在数据库中存在。其对应的实现代码如下。
public SqlDataReader CheckUser(string username)
{ ///定义数据库的Connection and Command
SqlConnection myConnection = new SqlConnection(ConnectionString);
SqlCommand myCommand = new SqlCommand("cunchu2",myConnection);
///定义访问数据库的方式为存储过程
myCommand.CommandType = CommandType.StoredProcedure;
///创建访问数据库的参数
SqlParameter parameterUserName = new SqlParameter("@Username",SqlDbType.VarChar,50);
parameterUserName.Value = username;
myCommand.Parameters.Add(parameterUserName);
SqlDataReader dr = null;
try
{ ///打开数据库的连接
myConnection.Open();
}
catch(Exception ex)
{
throw new Exception("数据库连接失败!",ex);
}
try
{ ///执行数据库的存储过程(访问数据库)
dr = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
}
catch(Exception ex)
{
throw new Exception(ex.Message,ex);
}
///返回 dr
return dr;
}
方法AddUser的功能是将新用户的注册信息添加到书库中,其具体实现过程如下。
(1)使用连接字符串创建con对象,实现数据库连接。
(2)设置myCommand对象的执行方法是存储过程,并设置执行的存储过程为cunchu1。
(3)添加存储过程需要的@Username、@Password和@UserID参数值。
(4)执行存储过程cunchu2,将结果返回到@UserID中。
上述过程对应的实现代码如下。
public int AddUser(String username,String password)
{ ///定义数据库的Connection and Command
SqlConnection myConnection = new SqlConnection(ConnectionString);
SqlCommand myCommand = new SqlCommand("cunchu1",myConnection);
///定义访问数据库的方式为存储过程
myCommand.CommandType = CommandType.StoredProcedure;
///创建访问数据库的参数
SqlParameter parameterUserName = new SqlParameter("@UserName",SqlDbType. VarChar,32);
parameterUserName.Value = username;
myCommand.Parameters.Add(parameterUserName);
SqlParameter parameterPassword = new SqlParameter("@Password",SqlDbType. VarChar,100);
parameterPassword.Value=password;
myCommand.Parameters.Add(parameterPassword);
SqlParameter parameterUserID=new SqlParameter("@UserID",SqlDbType.Int,4);
parameterUserID.Direction = ParameterDirection.ReturnValue;
myCommand.Parameters.Add(parameterUserID);
try
{ ///打开数据库的连接
myConnection.Open();
}
catch(Exception ex)
{
throw new Exception("数据库连接失败!",ex);
}
try
{ ///执行数据库的存储过程(访问数据库)
myCommand.ExecuteNonQuery();
}
catch(Exception ex)
{
throw new Exception(ex.Message,ex);
}
finally
{
if(myConnection.State == ConnectionState.Open)
{
///关闭数据库的连接
myConnection.Close();
}
}
return (int)parameterUserID.Value;
}
3.登录验证处理方法
验证模块最主要的功能是实现登录数据的验证,即验证用户名和密码是否正确。上述功能由方法GetUserLogin实现,它能够使存储过程“cunchu3”根据用户的输入数据和库内的合法数据进行检测。其对应的实现代码如下。
public SqlDataReader GetUserLogin(string username,string password)
{ ///定义数据库的Connection and Command
SqlConnection myConnection = new SqlConnection(ConnectionString);
SqlCommand myCommand = new SqlCommand("cunchu3",myConnection);
///定义访问数据库的方式为存储过程
myCommand.CommandType = CommandType.StoredProcedure;
///创建访问数据库的参数
SqlParameter parameterUserName = new SqlParameter("@Username",SqlDbType. VarChar,50);
parameterUserName.Value = username;
myCommand.Parameters.Add(parameterUserName);
SqlParameter parameterPassword = new SqlParameter("@Password",SqlDbType. VarChar,255);
parameterPassword.Value = password;
myCommand.Parameters.Add(parameterPassword);
SqlDataReader dr = null;
try
{ ///打开数据库的连接
myConnection.Open();
}
catch(Exception ex)
{
throw new Exception("数据库连接失败!",ex);
}
try
{ ///执行数据库的存储过程(访问数据库)
dr = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
}
catch(Exception ex)
{
throw new Exception(ex.Message,ex);
}
//返回 dr
return dr;
}