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

📄 globleutility.cs

📁 Oracle源码:Oracle 数据库管理与应用系统开发代码
💻 CS
📖 第 1 页 / 共 3 页
字号:
		{
			if(Connection.DBConnection.State != ConnectionState.Open)
				Connection.DBConnection.Open();

			OracleCommand Cmd = new OracleCommand(ProcName, Connection.DBConnection);
			Cmd.CommandType = CommandType.StoredProcedure;

			if(inParam != null)
			{
				for(int i = 0; i < inParam.Length; i++)
					Cmd.Parameters.Add(inParam[i]);
			}

			if(outParam != null)
			{
				for(int i = 0; i < outParam.Length; i++)
					Cmd.Parameters.Add(outParam[i]);
			}

			try
			{
				Cmd.ExecuteNonQuery();
			}
			catch//(Exception E)
			{
				//MessageBox.Show(E.ToString());
				
				return 7;
			}

			return 0;
		}

		//过程名称:ExecStoredProc
		//功能:执行一个需要返回数据集的存储过程
		//参数:ProcName    存储过程名字,使用包时要加上包的名字
		//      inParam     存储过程需要的输入参数
		//      outParam    存储过程需要的输出参数,注意,这是引用参数
		//      outDataReader  接收数据集的参数,注意,这是引用参数
		//返回值:0表示成功,大于零表示错误号
		public static int ExecStoredProc(string ProcName, OracleParameter[] inParam, 
			ref OracleParameter[] outParam, ref OracleDataReader outDataReader)
		{
			if(Connection.DBConnection.State != ConnectionState.Open)
				Connection.DBConnection.Open();

			OracleCommand Cmd = new OracleCommand(ProcName, Connection.DBConnection);
			Cmd.CommandType = CommandType.StoredProcedure;

			if(inParam != null)
			{
				for(int i = 0; i < inParam.Length; i++)
					Cmd.Parameters.Add(inParam[i]);
			}

			if(outParam != null)
			{
				for(int i = 0; i < outParam.Length; i++)
					Cmd.Parameters.Add(outParam[i]);
			}

			try
			{
				outDataReader = Cmd.ExecuteReader();
			}
			catch//(Exception E)
			{
				//MessageBox.Show(E.ToString());
				
				return 7;
			}

			return 0;
		}

		//过程名称:ExecStoredProc
		//功能:执行一个需要返回数据集的存储过程
		//参数:ProcName    存储过程名字,使用包时要加上包的名字
		//      inParam     存储过程需要的输入参数
		//      outParam    存储过程需要的输出参数,注意,这是引用参数
		//      outDataset  接收数据集的参数,注意,这是引用参数
		//返回值:0表示成功,大于零表示错误号
		public static int ExecStoredProc(string ProcName, OracleParameter[] inParam, 
			ref OracleParameter[] outParam, ref DataSet outDataSet)
		{
			if(Connection.DBConnection.State != ConnectionState.Open)
				Connection.DBConnection.Open();

			OracleCommand Cmd = new OracleCommand(ProcName, Connection.DBConnection);
			Cmd.CommandType = CommandType.StoredProcedure;

			if(inParam != null)
			{
				for(int i = 0; i < inParam.Length; i++)
					Cmd.Parameters.Add(inParam[i]);
			}

			if(outParam != null)
			{
				for(int i = 0; i < outParam.Length; i++)
					Cmd.Parameters.Add(outParam[i]);
			}

			try
			{
				OracleDataAdapter DataAdapter = new OracleDataAdapter(Cmd);
				DataAdapter.Fill(outDataSet);
			}
			catch//(Exception E)
			{
				//MessageBox.Show(E.ToString());
				return 7;
			}

			return 0;
		}
	}
	/// <summary>
	/// 类名:ConnectionConsu
	/// 功能:建立与中心数据库的连接----------刘建国添加此类----
	///		用于综合消费系统和中心数据库的连接,和Connection类相比,只是去掉了连接失败时的提示框
	/// 
	/// 算法:首先用通用的用户名和密码从数据库中取得一个值(可认为是种子),然后
	///       根据一个算法算出正确的密码,算法与所给的用户名有关。
	/// 使用方法:使用构造函数建立实例,然后调用Open函数。
	/// </summary>
	public class ConnectionConsu
	{
		public ConnectionConsu()
		{
		}

		// 功能:建立数据库连接
		// 参数: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();
			dbConnection.ConnectionString = sTempConnStr;
			try
			{
				dbConnection.Open();
			}	

			catch
			{
				return ErrorCode.E_3_ConnectDBFailed_Code;
			}

			return 0;
		}

		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)
					{
						return null;
					}
				}
				return dbConnection;
			}
		}

		public static String LoginUser
		{
			get
			{
				return sLoginUser;
			}

			set
			{
				sLoginUser = value;
			}
		}

		public static int WSID
		{
			get
			{
				return nWSID;
			}

			set
			{
				nWSID = value;
			}
		}

		public static int RightID
		{
			get
			{
				return nRightID;
			}

			set
			{
				nRightID = value;
			}
		}

		private static System.Data.OracleClient.OracleConnection dbConnection;
		private static String sLoginUser;
		private static int nWSID;
		private static int nRightID;

		// 功能:计算出密码,并生成正确的数据库连接字符串
		// 参数:sConn        连接字符串除用户名密码的部分
		//       sUserPWD     连接字符串的用户名密码部分
		//       sUserName    连接数据库所用的数据库用户名
		// 返回:返回一个字符串。如果成功生成了连接串则返回值不为空,否则为空
		private String ComputeConnStr(String sConn, String sUserPWD, String sUserName)
		{
			System.Data.OracleClient.OracleCommand dbCommand;
			dbConnection.ConnectionString = sConn + sUserPWD;
			try
			{
				dbConnection.Open();
			}
			catch
			{
				return "";
			}

			dbCommand = new System.Data.OracleClient.OracleCommand("Begin CreatePWDSeed; END;", dbConnection);
			if(dbCommand == null)
				return "";
			try
			{
				dbCommand.ExecuteNonQuery();
				//检查时钟设置,如果与服务器时钟相差超过了一分钟则自动调整时间
				CheckClock();
			}
			catch
			{
				return "";
			}
			
			dbConnection.Close();

			// 为用户sUserName生成密文
			int nSeed = DateTime.Now.Year * 10000 + DateTime.Now.Month * 100 + DateTime.Now.Day;
			if(sUserName.ToUpper() == "PLATF")
				nSeed = nSeed + 1023;
			else if(sUserName.ToUpper() == "CARDM")
				nSeed = nSeed + 1023 * 2;
			else if(sUserName.ToUpper() == "FINAN")
				nSeed = nSeed + 1023 * 3;
			else if(sUserName.ToUpper() == "RECHG")
				nSeed = nSeed + 1023 * 4;
			else if(sUserName.ToUpper() == "CYBER")
				nSeed = nSeed + 1023 * 5;
			else if(sUserName.ToUpper() == "CONSU")
				nSeed = nSeed + 1023 * 6;
			else if(sUserName.ToUpper() == "QUERY")
				nSeed = nSeed + 1023 * 7;
			else if(sUserName.ToUpper() == "MONIT")
				nSeed = nSeed + 1023 * 8;
			else if(sUserName.ToUpper() == "LIBCHECK")
				nSeed = nSeed + 1023 * 9;
			else if(sUserName.ToUpper() == "CHARGE")
				nSeed = nSeed + 1023 * 10;
			
			string sPWDSeed = "";
			int nOdd = 0;
			int nEven = 0;
			int nTemp;
			for(int i = 0; i < 15; i++)
			{
				nTemp = ((int)Math.Round(Math.Abs(Math.Sin(nSeed + i + 1)) * 100, 0) % 26) + 65;
				sPWDSeed = sPWDSeed + (char)nTemp;
				if((i % 2) == 0)
					nOdd = nOdd + nTemp;
				else
					nEven = nEven + nTemp * 3;
			}
			nTemp = ((nOdd + nEven) % 26) + 65;
			sPWDSeed = sPWDSeed + (char)nTemp;


			//计算出密码
			string sPWD = "";
			int nFirst, nSecond;
	
			nTemp = sPWDSeed[0] % 8;
			for(int i = 0; i < 8; i++)
			{
				nFirst = sPWDSeed[i];
				nSecond = sPWDSeed[((nTemp + i) % 8) + 8];

				sPWD = sPWD + (char)(((nFirst + nSecond * 3) % 26) + 65);
			}

			sUserPWD = "password=" + sPWD + ";user id=" + sUserName + ";";

			return sConn + sUserPWD; 
		}

		private void CheckClock()
		{
			DateTime dt = DateTime.Now;

			OracleCommand Cmd = new OracleCommand();
			Cmd.Connection = ConnectionConsu.DBConnection;
			Cmd.CommandType = CommandType.Text;
			Cmd.CommandText = "Select sysdate From Dual";
			OracleDataReader Reader;
			Reader = Cmd.ExecuteReader();
			Reader.Read(); 
			DateTime dt2 = Reader.GetDateTime(0);
			Reader.Close();
			Cmd.Dispose();
			
			TimeSpan ts = dt.Subtract(dt2);
			if(Math.Abs(ts.TotalMinutes) >= 1)
			{
				SystemTime st = new SystemTime();
				dt2.ToLocalTime();
				st.Year = (ushort)dt2.Year;
				st.Month = (ushort)dt2.Month;
				st.Day = (ushort)dt2.Day;
				st.Hour = (ushort)dt2.Hour;
				st.Minute = (ushort)dt2.Minute;
				st.Second = (ushort)dt2.Second;
				st.DayOfWeek = (ushort)dt2.DayOfWeek;
				st.Milliseconds = (ushort)dt2.Millisecond;
				Kernel32.SetLocalTime(st);
				MessageBox.Show("由于您的时钟设置与服务器时间相差\n" +
					"超过了一分钟, 所以改变了您的时钟设置。", "提示", 
					MessageBoxButtons.OK, MessageBoxIcon.Information);
			}
		}
	}



}

⌨️ 快捷键说明

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