📄 globleutility.cs
字号:
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 = Connection.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);
}
}
}
[ StructLayout( LayoutKind.Sequential )]
public class SystemTime
{
public ushort Year;
/*public ushort year
{
get
{
return Year;
}
}*/
public ushort Month;
public ushort DayOfWeek;
public ushort Day;
public ushort Hour;
public ushort Minute;
public ushort Second;
public ushort Milliseconds;
}
public class Kernel32
{
[ DllImport( "Kernel32.dll" )] public static extern void GetLocalTime([In, Out] SystemTime st);
[ DllImport( "Kernel32.dll" )] public static extern void SetLocalTime([In] SystemTime st);
[ DllImport( "Kernel32.dll" )] public static extern bool Beep([In] uint dwFreq, [In] uint dwDuration);
}
/// <summary>
/// Register
/// 功能:读写注册表,从而设置或取得数据库服务器的机器名
/// 使用方法:访问或设置属性DBComputer
/// </summary>
public class Register
{
public Register()
{
RegistryKey rk = Registry.LocalMachine;
rk = rk.CreateSubKey("Software\\BJTU_AILab\\LibCard");
if(null != rk)
{
dbComputer = (string)rk.GetValue("DBMachine", "");
dbSource = (string)rk.GetValue("DBSource", "");
}
}
// 取得或设置数据库所在的计算机名
public String DBComputer
{
get
{
return dbComputer;
}
set
{
RegistryKey rk = Registry.LocalMachine;
rk = rk.CreateSubKey("Software\\BJTU_AILab\\LibCard");
if(null != rk)
{
dbComputer = value;
rk.SetValue("DBMachine", dbComputer);
}
}
}
//取得或设置数据库名
public String DBSource
{
get
{
return dbSource;
}
set
{
RegistryKey rk = Registry.LocalMachine;
rk = rk.CreateSubKey("Software\\BJTU_AILab\\LibCard");
if(null != rk)
{
dbSource = value;
rk.SetValue("DBSource", dbSource);
}
}
}
private String dbComputer; //数据库所在的计算机名
private String dbSource; //数据库名
}
//全局的帮助函数
public class GlobleHelper
{
/// <summary>
/// 判断该学生或教工是否有卡,如果有则返回其学号或教工号
/// </summary>
/// <param name="UserNumber">学号或教工号</param>
/// <param name="UserType">=1表示学生,2表示教工</param>
/// <param name="oc">用于查询的连接</param>
/// <param name="UserHasCard">返回有卡用户的学号或教工号</param>
/// <returns ret="int">=0表示在该用户目前有卡,=1表示没卡可以删,=2表示调用该函数参数不对,=3连接大不开,4查询出错</returns>
public static int MakeSureIfStillHaveCard(ArrayList UserNumber,int UserType,OracleConnection oc,ref string UserHasCard)
{
UserHasCard = "";
string sTableName = "",mySql = "";
if(UserType == 1)//学生
{
sTableName = "PlatF_SUser_Info";
}
else if(UserType == 2)//教工
{
sTableName = "PlatF_TUser_Info";
}
else if(UserType != 1 || UserType != 2 || UserNumber.Count == 0)
{
return 2;
}
//判断连接是否可用
if(oc.State != ConnectionState.Open)
{
try
{
oc.Open();
}
catch
{
return 3;
}
}
for( int i = 0;i<UserNumber.Count;i++ )
{
mySql = "SELECT USERNumber,Name FROM "+sTableName+" WHERE USERID = '"+UserNumber[i].ToString().Trim()+"' AND USERID in "+
" (SELECT USERID FROM CARDM_USERCARD)";
OracleCommand selCommand = new OracleCommand(mySql,oc);
OracleDataReader gbDataReader = null;
try
{
gbDataReader = selCommand.ExecuteReader();
}
catch(Exception ee)
{
GC.Collect();
return 4;
}
if(gbDataReader.HasRows)
{
try
{
while(gbDataReader.Read())
{
UserHasCard = UserHasCard + gbDataReader.GetString(0)+"("+gbDataReader.GetString(1)+")" ;
}
}
catch
{}
gbDataReader.Close();
GC.Collect();
return 0;
}
else
{
gbDataReader.Close();
GC.Collect();
return 1;
}
}
return 4;
}
//过程名称:ExecStoredProc_Consu-----综合消费系统专用
//功能:执行一个不需要返回数据集的存储过程
//参数:ProcName 存储过程名字,使用包时要加上包的名字
// inParam 存储过程需要的输入参数
// outParam 存储过程需要的输出参数,注意,这是引用参数
//返回值:0表示成功,大于零表示错误号
public static int ExecStoredProc_Consu(string ProcName, OracleParameter[] inParam,
ref OracleParameter[] outParam)
{
if(ConnectionConsu.DBConnection.State != ConnectionState.Open)
ConnectionConsu.DBConnection.Open();
OracleCommand Cmd = new OracleCommand(ProcName, ConnectionConsu.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 存储过程需要的输出参数,注意,这是引用参数
//返回值:0表示成功,大于零表示错误号
public static int ExecStoredProc(string ProcName, OracleParameter[] inParam,
ref OracleParameter[] outParam)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -