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

📄 globleutility.cs

📁 本书主要介绍了从基础开始建立Portal的快速应用开发过程(RAD)的方法。通过本书你可以了解到关于Oracle 9iAS Portal产品的主要特性、入口的开发和组织、网络开发和管理、实际的关系型数
💻 CS
📖 第 1 页 / 共 3 页
字号:
///////////////////////////////////////////////////////////////////////////////
/// 北京交通大学版权所有  2004.07                                           /// 
/// 文件名: GlobleUtitity.cs                                                ///
/// 描述:本文件包含了电子图书馆一卡通系统的公共操作                        ///
/// 创建时间: 2004.07.19                                                   ///
///////////////////////////////////////////////////////////////////////////////

using System;
using System.Collections;
using System.Windows.Forms;
using Microsoft.Win32;
using System.Data;
using System.Data.OracleClient;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Timers;
using System.Threading;
using DogOperaLib;

namespace GlobleUtility
{  
	/// <summary>
	/// 声明一个结构,用来赋值给listview的Tag属性。
	/// </summary>
	public struct lvTagTemp
	{
		public string temp_id;  //保存记录的ID
		
	}
	/// <summary>
	/// 声明一个结构,用来赋值给treeview的Tag属性。
	/// </summary>
	public struct trvTagTemp
	{
		public string temp_id;  //节点记录的ID
		public int    temp_type; //节点的类型 //该值为0代表此节点是最高节点,该值为1代表此节点是部门类型,该值为2代表此节点是班级类型,该值为3代表此节点是专业类型
		public int    temp_isexpand; //节点未/已展开过 ,未1,已2 
		
	}
	/// <summary>
	/// 声明一个结构,用来赋值给listview的Tag属性。
	/// </summary>
	public struct admin_lvTagTemp
	{
		public string temp_systemid;  //节点子系统的ID
		public string temp_wsid;      //节点工作站的ID
		public string temp_rightid;   //节点权限的ID 
		
	}


	/// <summary>
	/// 声明一个结构,用来赋值给listview的Tag属性。
	/// </summary>
	public struct HR_lvTagTemp
	{
		public string temp_fromid;  //父ID
		public string temp_toid;      //子ID
		public DateTime temp_fromdate;   //起始时间
		
	}
	//卡存信息
	public struct CardInfo
	{
		public string UnitSign;//单位标志——存学校代码
		public string UserType;//用户类型
		public string UserID;//UserID
		public string LogicID;//用户逻辑编号(学号、教工号)
		public string ValidDate;//有效日期
		//public string CertificateID;//图书证号
		public long Balance;//卡片余额
		public long CardSerialNum;//卡序列号
		public int CardNo;//卡号
		public string CardType;//卡类别

		public string UserName;//姓名
		public string FreeTime;//剩余机时

		//定义一个构造函数
//		public CardInfo()
//		{
//            UnitSign = "石家庄信息工程职业学院";
//		}
	}

	/// <summary>
	/// 卡操作类,定义一些公共卡操作,如:
	/// 检查有效期;检查黑名单。
	/// </summary>
	public class CardOperation
	{
		/// <summary>
		/// 检查有效期
		/// </summary>
		/// <param name="sValidDate">从卡中读出的有效期字符串</param>
		/// <returns>未过期,返回true;已过期,返回false。</returns>
		public static bool CheckValidDate(string sValidDate)
		{
			int year = Convert.ToInt32(sValidDate.Substring(0, 4));
			int month = Convert.ToInt32(sValidDate.Substring(4, 2));
			int date = Convert.ToInt32(sValidDate.Substring(6, 2));
			DateTime dt = new DateTime(year, month, date);
			
			int compareValue = 0;
			compareValue = dt.CompareTo(System.DateTime.Today);
			if (compareValue < 0)
			{
				//已过有效期,提示并退出
				return false;
			}
			return true;
		}
		
		/// <summary>
		/// 检查卡号是否在黑名单(CardM_Black_List)中
		/// </summary>
		/// <param name="cardNo">卡号</param>
		/// <returns>卡号在黑名单中,返回1;不在返回0;异常情况返回-1;</returns>
		public static int CheckBlackList(int cardNo)
		{
			OracleConnection myConn = Connection.DBConnection;
			if (myConn == null)
			{
				return -1;
			}

			string mySql = "select * from CardM_Black_List where CardID = " + cardNo.ToString();
			OracleCommand dbCommand = new OracleCommand(mySql, myConn);
			try
			{
				OracleDataReader dbReader = dbCommand.ExecuteReader();
				if (dbReader.Read())		//cardNo在黑名单中
				{
					dbReader.Close();
					return 1;
				}
				dbReader.Close();
				return 0;
			}
			catch(Exception)
			{
				return -1;
			}
		}

	}

	/// <summary>
	/// 类名:Connection
	/// 功能:建立与数据库的连接
	/// 算法:首先用通用的用户名和密码从数据库中取得一个值(可认为是种子),然后
	///       根据一个算法算出正确的密码,算法与所给的用户名有关。
	/// 使用方法:使用构造函数建立实例,然后调用Open函数。
	/// </summary>
	public class Connection
	{
		public Connection()
		{
			bCanExit = false;//非定时器申请退出			
			//生成对象实例,在open函数时使定时器生效,当退出程序或连接数据库出错时使定时器失效并销毁
			//CheckConnectionTimer = new System.Timers.Timer();
			//创建事件句柄
			//CheckConnectionTimer.Elapsed+=new ElapsedEventHandler(OnTimedCheckConnection);
			// 设置间隔时间
			//CheckConnectionTimer.Interval=120000;//2分钟
			//生成对象实例,在open函数时判断是否为平台系统确定是否使定时器生效,当退出程序时使定时器失效并销毁
			CheckDogTimer = new System.Timers.Timer();
			//创建事件句柄
			CheckDogTimer.Elapsed+=new ElapsedEventHandler(OnTimedCheckDog);
			// 设置间隔时间
			CheckDogTimer.Interval=10000;
		}
		[DllImport("libcard.dll")]
		public static extern void CloseSocket();
		//private static System.Timers.Timer CheckConnectionTimer = null;
		private static System.Timers.Timer CheckDogTimer = null;
		public static bool bCanExit;
		//private static string systemName = "";//登陆各系统用户名
		//private static string conString = "";
		// 功能:建立数据库连接
		// 参数:sUserName    连接数据库所用的用户名
		// 返回:整型值,0表示无错误,大于零表示一个错误码
		public int Open(String sUserName)
		{
			Register Reg = new Register();
			if(null == Reg)
				return ErrorCode.E_1_CreateObjFailed_Code;
			if(Reg.DBComputer.Equals("") || Reg.DBSource.Equals(""))
			{
				//如果未正确设置数据库参数则调出设置数据库参数的UI设置参数
				CfrmSetDBInfo frmSetDBInfo = new CfrmSetDBInfo();
				frmSetDBInfo.edtDBComputer.Text = Reg.DBComputer;
				frmSetDBInfo.edtDBName.Text = Reg.DBSource;
				if(frmSetDBInfo.ShowDialog() == DialogResult.OK)
				{
					Reg.DBComputer = frmSetDBInfo.edtDBComputer.Text.Trim();
					Reg.DBSource = frmSetDBInfo.edtDBName.Text.Trim();
				}
			}

			dbConnection = new System.Data.OracleClient.OracleConnection();
			if(null == dbConnection)
				return ErrorCode.E_1_CreateObjFailed_Code;

			String sConn = "data source=" + Reg.DBSource + ";";
			String sUserPWD = "password=dummyaipwd;user id=dummyuser;";

			String sTempConnStr = ComputeConnStr(sConn, sUserPWD, sUserName);
			if(sTempConnStr == "")
				return ErrorCode.E_2_CreateConnectStringFailed_Code;

			if(dbConnection.State != ConnectionState.Closed)
				dbConnection.Close();
			//conString = sTempConnStr;
			dbConnection.ConnectionString = sTempConnStr;
			try
			{
				dbConnection.Open();
			}
			catch
			{
				return ErrorCode.E_3_ConnectDBFailed_Code;
			}
			// 运行到此说明连接已被打开,所以启动定时器
			//CheckConnectionTimer.Enabled=true;
			// 运行到此说明连接已被打开,如果是平台系统则开始检查加密狗定时器
			if(sUserName.ToUpper() == "PLATF")
			{
				CheckDogTimer.Enabled = true;
			}
			//systemName = sUserName.Trim();
			return 0;
		}
		// 检查连接定时器代码
		//private static void OnTimedCheckConnection(object source, ElapsedEventArgs e)
		//{
		//	System.Data.OracleClient.OracleCommand ocmd = new OracleCommand("SELECT SYSDATE FROM DUAL",dbConnection);
		//	try
		//	{
		//		ocmd.ExecuteNonQuery();				
		//	}
		//	catch(Exception)
		//	{
		//		try
		//		{
		//			System.Data.OracleClient.OracleConnection oc = new OracleConnection(conString);
		//			//oc.InitializeLifetimeService()
		//			oc.Open();
		//			dbConnection.Close();
		//			dbConnection.Dispose();
		//			dbConnection = oc;
		//			ocmd.Dispose();
		//			ocmd = new OracleCommand("SELECT SYSDATE FROM DUAL",dbConnection);
		//			ocmd.ExecuteNonQuery();					
		//		}
		//		catch(Exception)
		//		{
		//			if(systemName.ToUpper() != "CYBER")
		//			{				
		//				CheckConnectionTimer.Enabled = false;
		//				CheckConnectionTimer.Dispose();
		//				MessageBox.Show("对不起,很抱歉出现次对话框\r\n由于你尚未操作数据库的时间太长\r\n处于安全考虑与中心数据库的连接已关闭\r\n请您重新登陆系统!","系统信息",MessageBoxButtons.OK,MessageBoxIcon.Warning);
		//				bCanExit = true;
		//				try
		//				{
		//					CloseSocket();
		//				}
		//				catch
		//				{}
		//				Application.Exit();						
		//			}
		//		}
		//	}
		//	bCanExit = false;
		//	GC.Collect();
		//}	

		// 检查加密狗定时器代码
		private static void OnTimedCheckDog(object source, ElapsedEventArgs e)
		{					
			//重新计算下次检测加密狗时间长度
			CheckDogTimer.Enabled = false;
			Random rd = new Random();
			int interval = 0;
			//600000位十分钟,大于五分钟检测
			while((interval = rd.Next(1200000)) < 150000);
			CheckDogTimer.Interval = interval;
			CheckDogTimer.Enabled = true;
			ushort DogCascade = 0;
			uint DogPassword = 0;			
			uint iRet = 0;
			ushort DogBytes = 195;
			ushort DogAddr = 0;
			byte []DogData = new byte[195];
			//
			// Windows 窗体设计器支持所必需的
			//
			System.Timers.Timer ForseOutTimer = new System.Timers.Timer();
			ForseOutTimer.Elapsed+=new ElapsedEventHandler(ForseOutTimer_Elapsed);
			ForseOutTimer.Interval = 10000;
			//检查和操作加密狗
			DogOperate dop = new DogOperate();
			try
			{
				dop.Check_Dog(DogCascade,DogPassword,ref iRet);
			}
			catch
			{
				ForseOutTimer.Enabled = true;
				MessageBox.Show("检测到加密狗出错,可能加密狗不存在\r\n或驱动安装不正确,程序将在10秒内强制退出!","消息:",MessageBoxButtons.OK,MessageBoxIcon.Warning);
				Application.Exit();
				ForseOutTimer.Enabled = false;
				bCanExit = true;
				return;
			}
			if(0!=iRet)
			{
				ForseOutTimer.Enabled = true;
				MessageBox.Show("加密狗不在USB口上,或驱动安装不正确\r\n程序将在10秒内强制退出!","消息:",MessageBoxButtons.OK,MessageBoxIcon.Warning);
				Application.Exit();
				ForseOutTimer.Enabled = false;
				bCanExit = true;
				return;
			}
			try
			{
				dop.Read_Dog(DogCascade,DogPassword+1,DogAddr,DogBytes,ref DogData[0],ref iRet);
				if(iRet != 0)
				{
					ForseOutTimer.Enabled = true;
					MessageBox.Show("读狗操作失败\r\n程序将在10秒内强制退出!","消息:",MessageBoxButtons.OK,MessageBoxIcon.Warning);
					Application.Exit();
					ForseOutTimer.Enabled = false;
					bCanExit = true;
					return;
				}
			}
			catch
			{
				ForseOutTimer.Enabled = true;
				MessageBox.Show("对狗操作失败\r\n程序将在10秒内强制退出!","消息:",MessageBoxButtons.OK,MessageBoxIcon.Warning);
				Application.Exit();
				ForseOutTimer.Enabled = false;
				bCanExit = true;
				return;
			}
			bCanExit = false;
		}
		// 加密狗不存在时强制30s内退出代码
		private static void ForseOutTimer_Elapsed(object source, ElapsedEventArgs e)
		{
			Application.Exit();
			bCanExit = true;
		}
		public void Close()
		{
			if(dbConnection != null)
			{
				if(dbConnection.State != ConnectionState.Closed)
					dbConnection.Close();
			}
		}

		public static System.Data.OracleClient.OracleConnection DBConnection
		{
			get
			{
				if(dbConnection == null)
					return null;

				if (dbConnection.State != ConnectionState.Open)
				{
					try
					{
						dbConnection.Open();
					}
					catch (OracleException)
					{
						ErrorCode E = new ErrorCode();
						E.ShowMessage(ErrorCode.E_3_ConnectDBFailed_Code);
						return null;
					}
				}
				return dbConnection;
			}
		}

		public static String LoginUser
		{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -