📄 globleutility.cs
字号:
{
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 + -