文章教程

21.4数据库访问层

8/31/2020 9:56:04 PM 人评论 次浏览

作为整个项目的核心和难点,本项目的数据访问层分为如下4个部分。

  • 登录验证。
  • 聊天室主页。
  • 聊天交流处理。
  • 系统管理。

为了便于后期维护,专门编写了文件Chat.cs来实现。其主要功能是在ASPNETAJAXWeb. AjaxChat控件中建立Chat类,并定义多个方法实现对各系统文件在数据库中的处理。

在文件chat.cs中,与用户登录验证模块相关的是方法GetUser(string username,string password),其运行流程如图21-2所示。

图21-2 登录验证模块数据访问层运行流程图

下面介绍上述方法的具体实现过程。

1.定义Chat类

定义Chat类的实现代码如下。

using System;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
namespace ASPNETAJAXWeb.AjaxChat
……
public class Chat
  {
    public Chat()
    {
      //
    }

2.获取登录用户信息

获取登录用户信息即获取当前登录用户的用户名和密码,确保合法用户才能登录系统。此功能是由方法GetUser(string username,string password)实现的,其具体实现过程如下。

(1)从系统配置文件Web.config内获取数据库连接参数,并将其保存在connectionString内。

(2)使用连接字符串创建con对象,实现数据库连接。

(3)新建获取数据库内用户名和密码信息的SQL查询语句。

(4)创建获取数据的对象cmd。

(5)打开数据库连接,获取查询数据。

(6)将获取的查询结果保存在dr中,并返回dr。

上述过程的对应实现代码如下。

public SqlDataReader GetUser(string username,string password)
    {  //获取连接字符串
      string connectionString = ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].Connection String;
      //创建连接
      SqlConnection con = new SqlConnection(connectionString);
      //创建SQL语句
      string cmdText = "SELECT ID FROM [User] WHERE Username=@Username AND Password=@Password";
      //创建SqlCommand
      SqlCommand cmd = new SqlCommand(cmdText,con);
      //创建参数并赋值
      cmd.Parameters.Add("@Username",SqlDbType.VarChar,50);
      cmd.Parameters.Add("@Password",SqlDbType.VarChar,255);
      cmd.Parameters[0].Value = username;
      cmd.Parameters[1].Value = password;
      //定义SqlDataReader
      SqlDataReader dr;
      try
      { //打开连接
        con.Open();
        //读取数据
        dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
      }
      catch(Exception ex)
      { //抛出异常
        throw new Exception(ex.Message,ex);
      }
      return dr;
    }

在文件chat.cs中,与系统在线聊天处理模块相关的方法如下。

  • GetNeirong(int chatID)。
  • GetSingleNeirong(int messageID)。
  • AddNeirong(string message,int userID,int chatID)。

上述方法的运行流程如图21-3所示。

图21-3 聊天处理模块数据访问层运行流程图

接下来将分别介绍上述方法的具体实现过程。

1.方法GetNeirong(int chatID)

方法GetNeirong(int chatID)的功能是获取某ID编号聊天室的聊天信息,其具体实现过程如下。

(1)从系统配置文件Web.config中获取数据库连接参数,并将其保存在connectionString中。

(2)使用连接字符串创建con对象,实现数据库连接。

(3)新建SQL查询语句,获取数据库内某ID编号聊天室的聊天信息。

(4)创建获取数据的对象da。

(5)打开数据库连接,获取查询数据。

(6)将获取的查询结果保存在ds中,并返回ds。

上述过程的对应实现代码如下。

public DataSet GetNeirong(int chatID)
    { 
      string connectionString = ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].Connection String;
      SqlConnection con = new SqlConnection(connectionString);
      //创建SQL语句
      string cmdText = "SELECT Message.*,[User].Username FROM Message INNER JOIN [User] ON Message.User
      ID=[User].ID WHERE ChatID=@ChatID Order by CreateDate DESC";
      //创建SqlDataAdapter
      SqlDataAdapter da = new SqlDataAdapter(cmdText,con);
      //创建参数并赋值
      da.SelectCommand.Parameters.Add("@ChatID",SqlDbType.Int,4);
      da.SelectCommand.Parameters[0].Value = chatID;
      //定义DataSet
      DataSet ds = new DataSet();
      try
      {
        con.Open();
        //填充数据
        da.Fill(ds,"DataTable");
      }
      catch(Exception ex)
      {
        throw new Exception(ex.Message,ex);
      }
      finally
      {
        con.Close();
      }
      return ds;
    }

2.方法GetSingleNeirong(int messageID)

方法GetSingleNeirong(int messageID)的功能是获取某ID编号的聊天信息。其具体实现过程如下。

(1)从系统配置文件Web.config中获取数据库连接参数,并将其保存在connectionString中。

(2)使用连接字符串创建con对象,实现数据库连接。

(3)新建SQL查询语句,获取数据库中某ID编号的聊天信息。

(4)创建获取数据的对象cmd。

(5)打开数据库连接,获取查询数据。

(6)将获取的查询结果保存在dr中,并返回dr。

上述过程的对应实现代码如下。

public SqlDataReader GetSingleNeirong(int messageID)
    {
      string connectionString = ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].Connection String;
      SqlConnection con = new SqlConnection(connectionString);
      string cmdText = "SELECT * FROM Message WHERE ID = @ID";
      //创建SqlCommand
      SqlCommand cmd = new SqlCommand(cmdText,con);
      //创建参数并赋值
      cmd.Parameters.Add("@ID",SqlDbType.Int,4);
      cmd.Parameters[0].Value = messageID;
      //定义SqlDataReader
      SqlDataReader dr;
      try
      {
        con.Open();
        //读取数据
        dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
      }
      catch(Exception ex)
      {
        throw new Exception(ex.Message,ex);
      }
      return dr;
    }

3.方法AddNeirong(string message,int userID,int chatID)

方法AddNeirong(string message,int userID,int chatID)的功能是将用户发送的聊天信息添加到系统库中。其具体实现过程如下。

(1)从系统配置文件Web.config中获取数据库连接参数,并将其保存在connectionString中。

(2)使用连接字符串创建con对象,实现数据库连接。

(3)新建SQL添加语句,向数据库内添加某ID编号的聊天信息。

(4)创建获取数据的对象cmd。

(5)打开数据库连接,执行添加处理。

(6)将操作结果保存在dr中,并返回dr。

上述过程的对应实现代码如下。

public int AddNeirong(string message,int userID,int chatID)
    {
      string connectionString = ConfigurationManager.ConnectionStrings["SQLCON NECTIONSTRING"].Connection String;
      SqlConnection con = new SqlConnection(connectionString);
      //创建SQL语句
      string cmdText = "INSERT INTO Message(Message,UserID,ChatID,CreateDate) VALUES(@Message,@UserID,
      @ChatID,GETDATE())";
      //创建SqlCommand
      SqlCommand cmd = new SqlCommand(cmdText,con);
      //创建参数并赋值
      cmd.Parameters.Add("@Message",SqlDbType.VarChar,1000);
      cmd.Parameters.Add("@UserID",SqlDbType.Int,4);
      cmd.Parameters.Add("@ChatID",SqlDbType.Int,1);
      cmd.Parameters[0].Value = message;
      cmd.Parameters[1].Value = userID;
      cmd.Parameters[2].Value = chatID;
      int result = −1;
      try
      {
        con.Open();
        //操作数据
        result = cmd.ExecuteNonQuery();
      }
      catch(Exception ex)
      {
        throw new Exception(ex.Message,ex);
      }
      finally
      {
        con.Close();
      }
      return result;
    }

在文件chat.cs中,与系统聊天室管理模块相关的方法如下。

  • GetUser(string username,string password)。
  • GetLiaotian()。
  • GetSingleLiaotian(int chatID)。
  • AddLiaotian(string chatName,int maxNumber,byte status,string remark)。
  • UpdateLiaotian(int chatID,string chatName,int maxNumber,byte status,string remark)。
  • DeleteLiaotian(int chatID)。

上述方法的运行流程如图21-4所示。

21-4

图21-4 聊天室管理模块数据访问层运行流程图

下面分别介绍上述方法的具体实现过程。

1.方法GetUser(string username,string password)

方法GetUser(string username,string password)的功能是获取系统会员用户的信息,其具体实现过程如下。

(1)从系统配置文件Web.config中获取数据库连接参数,并将其保存在connectionString中。

(2)使用连接字符串创建con对象,实现数据库连接。

(3)新建SQL查询语句,获取数据库内会员用户的信息。

(4)创建获取数据的对象cmd。

(5)打开数据库连接,获取查询数据。

(6)将获取的查询结果保存在dr中,并返回dr。

上述过程的对应实现代码如下。

public SqlDataReader GetUser(string username,string password)
    {  //获取连接字符串
      string connectionString = ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].Connection String;
      SqlConnection con = new SqlConnection(connectionString);
      //创建SQL语句
      string cmdText = "SELECT ID FROM [User] WHERE Username=@Username AND Password=@Password";
      SqlCommand cmd = new SqlCommand(cmdText,con);
      //创建参数并赋值
      cmd.Parameters.Add("@Username",SqlDbType.VarChar,50);
      cmd.Parameters.Add("@Password",SqlDbType.VarChar,255);
      cmd.Parameters[0].Value = username;
      cmd.Parameters[1].Value = password;
      //定义SqlDataReader
      SqlDataReader dr;
      try
      {  //打开连接
        con.Open();
        dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
      }
      catch(Exception ex)
      {  //抛出异常
        throw new Exception(ex.Message,ex);
      }
      return dr;
    }

2.方法GetLiaotian()

方法GetLiaotian()的功能是获取系统内所有的聊天室信息,其具体实现过程如下。

(1)从系统配置文件Web.config中获取数据库连接参数,并将其保存在connectionString中。

(2)使用连接字符串创建con对象,实现数据库连接。

(3)新建SQL查询语句,获取数据库中所有聊天室的信息。

(4)创建获取数据的对象da。

(5)打开数据库连接,获取查询数据。

(6)将获取的查询结果保存在ds中,并返回ds。

上述过程的对应实现代码如下。

public DataSet GetLiaotian()
   { //获取连接字符串
     string connectionString = ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].Connection String;
     //创建连接
     SqlConnection con = new SqlConnection(connectionString);
     //创建SQL语句
     string cmdText = "SELECT * FROM Chat Order by CurrentNumber DESC";
     //创建SqlDataAdapter
     SqlDataAdapter da = new SqlDataAdapter(cmdText,con);
     //定义DataSet
     DataSet ds = new DataSet();
     try
     {
       con.Open();
       //填充数据
       da.Fill(ds,"DataTable");
     }
      catch(Exception ex)
     {
      throw new Exception(ex.Message,ex);
     }
     finally
     { //关闭连接
      con.Close();
     }
     return ds;
    }

3.方法GetSingleLiaotian(int chatID)

方法GetSingleLiaotian(int chatID)的功能是获取系统内指定编号的聊天室信息,其具体实现过程如下。

(1)从系统配置文件Web.config中获取数据库连接参数,并将其保存在connectionString中。

(2)使用连接字符串创建con对象,实现数据库连接。

(3)新建SQL查询语句,获取数据库中某编号的聊天室信息。

(4)创建获取数据的对象cmd。

(5)打开数据库连接,获取查询数据。

(6)将获取的查询结果保存在dr中,并返回dr。

上述过程的对应实现代码如下。

public SqlDataReader GetSingleLiaotian(int chatID)
   {  //获取连接字符串
     string connectionString = ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].Connection String;
     SqlConnection con = new SqlConnection(connectionString);
     //创建SQL语句
     string cmdText = "SELECT * FROM Chat WHERE ID = @ID";
     //创建SqlCommand
     SqlCommand cmd = new SqlCommand(cmdText,con);
     //创建参数并赋值
     cmd.Parameters.Add("@ID",SqlDbType.Int,4);
     cmd.Parameters[0].Value = chatID;
     //定义SqlDataReader
     SqlDataReader dr;
     try
     {
       con.Open();
       //读取数据
       dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
     }
     catch(Exception ex)
     {
       throw new Exception(ex.Message,ex);
     }      
     return dr;
    }

4.方法AddLiaotian(string chatName,int maxNumber,byte status,string remark)

方法AddLiaotian(string chatName,int maxNumber,byte status,string remark)的功能是向系统中添加新的聊天室信息,其具体实现过程如下。

(1)从系统配置文件Web.config中获取数据库连接参数,并将其保存在connectionString中。

(2)使用连接字符串创建con对象,实现数据库连接。

(3)新建SQL插入语句,向系统数据库中添加新的聊天室信息。

(4)创建获取数据的对象cmd。

(5)打开数据库连接,执行插入操作。

(6)将操作结果保存在result中,并返回result。

上述过程的对应实现代码如下。

public int AddLiaotian(string chatName,int maxNumber,byte status,string remark)
   { //获取连接字符串
    string connectionString = ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].Connection String;
    //创建连接
    SqlConnection con = new SqlConnection(connectionString);
    //创建SQL语句
    string cmdText = "INSERT INTO Chat(ChatName,MaxNumber,CurrentNumber,Status,CreateDate,Remark) VALUES(@
    ChatName,@MaxNumber,0,@Status,GETDATE(),@Remark)";
    //创建SqlCommand
    SqlCommand cmd = new SqlCommand(cmdText,con);
    //创建参数并赋值
    cmd.Parameters.Add("@ChatName",SqlDbType.VarChar,200);
    cmd.Parameters.Add("@MaxNumber",SqlDbType.Int,4);
    cmd.Parameters.Add("@Status",SqlDbType.TinyInt,1);
    cmd.Parameters.Add("@Remark",SqlDbType.VarChar,1000);
    cmd.Parameters[0].Value = chatName;
    cmd.Parameters[1].Value = maxNumber;
    cmd.Parameters[2].Value = status;
    cmd.Parameters[3].Value = remark;
    int result = −1;
    try
    {
      con.Open();
      result = cmd.ExecuteNonQuery();
    }
    catch(Exception ex)
    {
      throw new Exception(ex.Message,ex);
    }
    finally
    {
      con.Close();
    }
    return result;
  }

5.方法UpdateLiaotian(int chatID,string chatName,int maxNumber,byte status,string remark)

方法UpdateLiaotian(int chatID,string chatName,int maxNumber,byte status,string remark)的功能是修改系统中某编号的聊天室信息,其具体实现过程如下。

(1)从系统配置文件Web.config中获取数据库连接参数,并将其保存在connectionString中。

(2)使用连接字符串创建con对象,实现数据库连接。

(3)新建SQL更新语句,对系统数据库中某编号的聊天室信息进行修改。

(4)创建获取数据的对象cmd。

(5)打开数据库连接,执行修改操作。

(6)将修改结果保存在result中,并返回result。

上述过程的对应实现代码如下。

public int UpdateLiaotian(int chatID,string chatName,int maxNumber,byte status,string remark)
   {
    string connectionString = ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].Connection String;
    //创建连接
    SqlConnection con = new SqlConnection(connectionString);
    //创建SQL语句
    string cmdText = "UPDATE Chat SET ChatName=@ChatName,MaxNumber=@MaxNumber,Status=@Status,
    Remark=@Remark WHERE ID=@ID";
    //创建SqlCommand
    SqlCommand cmd = new SqlCommand(cmdText,con);
    //创建参数并赋值
    cmd.Parameters.Add("@ChatName",SqlDbType.VarChar,200);
    cmd.Parameters.Add("@MaxNumber",SqlDbType.Int,4);
    cmd.Parameters.Add("@Status",SqlDbType.TinyInt,1);
    cmd.Parameters.Add("@Remark",SqlDbType.VarChar,1000);
    cmd.Parameters.Add("@ID",SqlDbType.Int,4);      
    cmd.Parameters[0].Value = chatName;
    cmd.Parameters[1].Value = maxNumber;
    cmd.Parameters[2].Value = status;
    cmd.Parameters[3].Value = remark;
    cmd.Parameters[4].Value = chatID;
    int result = −1;
    try
    {
      con.Open();
      //操作数据
      result = cmd.ExecuteNonQuery();
    }
    catch(Exception ex)
    {
      throw new Exception(ex.Message,ex);
    }
    finally
    {
      con.Close();
    }
    return result;
  }

6.方法DeleteLiaotian(int chatID)

方法DeleteLiaotian(int chatID)的功能是删除系统内某编号的聊天室信息,其具体实现过程如下。

(1)从系统配置文件Web.config中获取数据库连接参数,并将其保存在connectionString中。

(2)使用连接字符串创建con对象,实现数据库连接。

(3)新建SQL删除语句,删除系统数据库中某编号的聊天室信息。

(4)创建获取数据的对象cmd。

(5)打开数据库连接,执行删除操作。

(6)将操作结果保存在result中,并返回result。

上述过程的对应实现代码如下。

public int DeleteLiaotian(int chatID)
   {
     string connectionString = ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].Connection String;
     SqlConnection con = new SqlConnection(connectionString);
     string cmdText = "DELETE Chat WHERE ID = @ID";
     //创建SqlCommand
     SqlCommand cmd = new SqlCommand(cmdText,con);
     //创建参数并赋值
     cmd.Parameters.Add("@ID",SqlDbType.Int,4);
     cmd.Parameters[0].Value = chatID;
     int result = −1;
     try
     {
       con.Open();
       //操作数据
       result = cmd.ExecuteNonQuery();
     }
     catch(Exception ex)
     {
       throw new Exception(ex.Message,ex);
     }
     finally
     {
       con.Close();
     }
     return result;
   }
}

数据库技术是动态网站的根本,所以数据库的安全性就成为我们当务之急要解决的问题之一。在数据库安全问题上,大多数采用用户标识机制。用户标识是指用户向系统出示自己的身份证明,最简单的方法就是输入用户ID和密码。标识机制用于唯一标志进入系统的每个用户的身份,因此必须保证标识的唯一性。鉴别是指系统检查,验证用户的身份证明,以检验用户身份的合法性。标识和鉴别功能保证了只有合法的用户才能存取系统中的资源。

由于数据库用户的安全等级是不同的,因此分配给他们的权限也是不一样的,数据库系统必须建立严格的用户认证机制。身份的标识和鉴别是数据库管理系统(DBMS)对访问者授权的前提,并且通过审计机制使DBMS保留追究用户行为责任的能力。功能完善的标识与鉴别机制也是访问控制机制有效实施的基础,特别是在一个开放的多用户系统的网络环境中,识别与鉴别用户是构筑DBMS安全防线的1个重要环节。

教程类别