⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.cs

📁 东软内部材料(三)程序设计导论
💻 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 + -