📄 common.cs
字号:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Text;
using System.Security.Cryptography;
namespace DBUtils
{
/// <summary>
/// 该类为整个应用程序提供统一的数据库连接字符串。
/// </summary>
public class DBConnection
{
public static string m_ConnectionString="";
//ConnectionString 属性将读取 ASP.NET 系统配置中的 BlueHillDSN 设置,
// 以返回一个只读的数据库连接字符串。
static public string ConnectionString
{
get
{
//Web.Config 文件中读取连接字符串配置信息。
// 将该字符串保存在静态的字段中,以提高以后访问该属性的速度。
if( m_ConnectionString == "" )
{
//如果是首次读取该属性,则访问Web.Config 文件中的配置信息。
m_ConnectionString = ConfigurationSettings.AppSettings["BlueHillDSN"];
}
//返回连接字符串。
return m_ConnectionString;
}
}
}
/// <summary>
/// 该类表示一个公司员工,该类具有保存员工基本信息以及部门和部门经理的各个字段。
/// 还有三个静态方法:
/// GetEmployeeInfo:从数据库中获取员工基本信息。
/// GetManagerInfo:从数据库中获取所属经理基本信息。
/// GetCEOInfo:从数据库中获取总经理的员工编号。
/// 所涉及的知识点可以参阅课本第九章到第十一章。
/// </summary>
public class Employee
{
//以下是表示员工信息的字段:
public int EmployeeID; //员工编号
public int ManagerID ; //所属经理的员工编号
public int DeptID ; //部门编号
public string Email ; //Email
public string Name ; //员工姓名
public string ManagerName = ""; //所属经理的姓名
public string ManagerEmail = ""; //所属经理的Email
public string DeptName = ""; //部门名称
public string Telephone ; //电话号码
public string SelfIntro = ""; //自我介绍
public int ALhours = 0 ; //可用年假小时数
public bool IsManager = false; //该员工是否为部门经理
//该函数从数据库中获取员工基本信息,并将这些信息保存在类的字段中。
//参数 iEmpID:要查找员工的编号。
//参数 emp:保存数据库的查找结果。
//返回值:DBResult.Success 或 DBResult.Failed,表示操作成功与否。
public static int GetEmployeeInfo(int iEmpID, Employee emp)
{
// 创建连接数据库的 Connection 对象。
SqlConnection cn =new SqlConnection(DBConnection.ConnectionString);
string strSQL;
strSQL = "select * from viwwebEmpCommonInfo where EmployeeID=" + iEmpID.ToString();
// 创建 Command 对象执行查询 SQL 语句。
SqlCommand cmd = new SqlCommand(strSQL, cn);
// 设置该 Command 执行的是一条 SQL 语句
SqlDataReader dbReader;
int iRetValue = (int) DBResult.Success;
try
{
// 打开数据库连接,执行对数据库的操作。注意操作数据库会引发异常。
cn.Open();
dbReader = cmd.ExecuteReader();
if ( dbReader.Read() )
{
//如果找到该员工的数据,则继续执行以下操作:
//将DataReader 中的信息保存到参数 emp 中。
emp.EmployeeID = iEmpID;
emp.Name = (string)dbReader["Name"];
emp.DeptID = (int)dbReader["DeptID"];
emp.Email = (string)dbReader["Email"];
emp.Telephone = (string)dbReader["Telephone"];
//保存可用年假小时数
//编程技巧:如果数据库中的某个字段为 NULL,则不能直接将其赋给整型变量或字符串变量。
// 如果直接赋值会引发异常,此时可用下面的方法来处理这种情况。
if ( dbReader["VacationRemain"]!= System.DBNull.Value )
{
emp.ALhours = (int)dbReader["VacationRemain"];
}
//保存自我介绍
if (dbReader["SelfIntro"] != System.DBNull.Value )
{
emp.SelfIntro = (string)dbReader["SelfIntro"];
}
//获取总经理的员工编号。
int iCEOID=0;
GetCEOInfo(ref iCEOID);
if (emp.EmployeeID == iCEOID)
{ //如果员工为总经理
emp.IsManager = true;
}
else
{
//获取员工所属部门的经理的员工编号。
GetManagerInfo(emp.DeptID, emp);
//判定员工是否为经理
if ( emp.ManagerID == emp.EmployeeID )
{
emp.IsManager = true;
//如果员工为经理,则其经理为总经理。
Employee empCEO = new Employee();
Employee.GetEmployeeInfo(iCEOID, empCEO);
emp.ManagerName = empCEO.Name;
emp.ManagerID = empCEO.EmployeeID;
emp.ManagerEmail =empCEO.Email ;
}
}
iRetValue = (int)DBResult.Success;
}
else
iRetValue = (int)DBResult.Failed;
}
catch(Exception e)
{
// 产生异常,则对 iRetValue 赋值标志数据库操作失败。
iRetValue = (int)DBResult.Failed;
}
finally
{
// 关闭数据库连接,以节省系统资源。
if ( cn.State == ConnectionState.Open )
{
cn.Close();
}
}
return iRetValue;
}
//该函数从数据库中获取指定部门经理的基本信息,并将这些信息保存在参数 emp 的字段中。
//参数 iDeptID:部门编号。
//参数 emp:保存数据库的查找结果。
//返回值:DBResult.Success 或 DBResult.Failed,表示操作成功与否。
public static int GetManagerInfo(int iDeptID, Employee emp )
{
// 创建连接数据库的 Connection 对象。
SqlConnection cn = new SqlConnection(DBConnection.ConnectionString);
string strSQL ;
strSQL = "select * from viwwebManagerInfo where DeptID=" + iDeptID.ToString ();
// 创建 Command 对象执行查询 SQL 语句。
SqlCommand cmd = new SqlCommand(strSQL, cn);
// 设置该 Command 执行的是一条 SQL 语句
cmd.CommandType = CommandType.Text;
SqlDataReader dbReader;
int iRetValue = (int)DBResult.Success;
try
// 打开数据库连接,执行对数据库的操作。注意操作数据库会引发异常。
{
cn.Open();
// 将数据库的返回结果保存在 DataReader 中。
// 编程技巧:如果返回结果是单个标量值,如一个整数或一个字符串,
// 则可以执行 Command 对象的 ExecuteScalar 方法直接获取该值。
dbReader = cmd.ExecuteReader();
if ( dbReader.Read() )
//如果有返回数据可用。
//将 DataReader 中的结果保存在 emp 对象中。
{
emp.DeptName = (string)dbReader["DeptName"];
emp.ManagerName = (string)dbReader["ManagerName"];
emp.ManagerEmail = (string)dbReader["ManagerEmail"];
emp.ManagerID = (int)dbReader["ManagerID"];
dbReader.Close();
iRetValue = (int)DBResult.Success;
}
else
{
dbReader.Close();
iRetValue = (int)DBResult.Failed;
}
}
catch(Exception e)
{
// 产生异常,则对 iRetValue 赋值标志数据库操作失败。
iRetValue = (int)DBResult.Failed;
}
finally
{
// 关闭数据库连接,以节省系统资源。
if ( cn.State == ConnectionState.Open )
cn.Close();
}
return iRetValue;
}
//该函数从数据库中获取总经理的员工编号。
//参数 iCEOID:保存数据库的查找结果。
//返回值:DBResult.Success 或 DBResult.Failed,表示操作成功与否。
public static int GetCEOInfo(ref int iCEOID )
{
// 创建连接数据库的 Connection 对象。
SqlConnection cn = new SqlConnection(DBConnection.ConnectionString);
SqlCommand cmd = new SqlCommand("spwebGetCEOInfo", cn);
// 设置该 Command 执行的是一个存储过程
cmd.CommandType = CommandType.StoredProcedure;
// 为存储过程添加返回参数,该参数的值如果为 0 则表示数据库操作失败,非 0 则为成功。
SqlParameter paramReturn = new SqlParameter("@ReturnValue", SqlDbType.Int);
paramReturn.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(paramReturn);
int iRetValue = (int)DBResult.Success;
// 打开数据库连接,执行对数据库的操作。注意操作数据库会引发异常。
try
{
cn.Open();
// Command 对象的 ExecuteNonQuery 方法用来执行不返回记录集的 SQL 语句或存储过程。
cmd.ExecuteNonQuery();
}
catch( Exception e)
{
// 产生异常,则对 iRetValue 赋值标志数据库操作失败。
iRetValue = (int)DBResult.Failed;
}
finally
{
// 关闭数据库连接,以节省系统资源。
if( cn.State == ConnectionState.Open)
{
cn.Close();
}
}
if( (int)paramReturn.Value > 0)
{
//如果返回参数的值大于 0,则标识数据库操作成功。
iCEOID = (int)paramReturn.Value;
}
else
{
//否则标识数据库操作失败。
iRetValue = (int) DBResult.Failed;
}
return iRetValue;
}
}
///该枚举类型表示数据库操作的成功与否,分别用 1 和 0 表示。
///编程技巧:该枚举类型可直接对整数类型的变量进行赋值。
public enum DBResult
{
Success = 1,
Failed = 0
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -