You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

299 lines
11 KiB

2 weeks ago
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Data;
  6. using ICSSoft.Base.Config.AppConfig;
  7. using ICSSoft.Base.Config.DBHelper;
  8. using Oracle.ManagedDataAccess.Client;
  9. using System.Security.Cryptography;
  10. using System.IO;
  11. using System.Configuration;
  12. namespace NFine.Data.Extensions
  13. {
  14. public class DBHelper_Oracle
  15. {
  16. public static string DBServerIP = "";
  17. public static string OracleSID = "";
  18. public static string DBUserName = "";
  19. public static string DBPassword = "";
  20. public static OracleCommand cmd = null;
  21. public static OracleConnection conn = null;
  22. public static string connstr = "[DB.PLM]";
  23. public DBHelper_Oracle()
  24. { }
  25. #region 建立Oracle数据库连接对象
  26. /// <returns>返回一个数据库连接的OracleConnection对象</returns>
  27. public static OracleConnection init()
  28. {
  29. try
  30. {
  31. GetDataBaseConnect();
  32. string connstr = "User Id={2};Password={3};Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME={1})))";
  33. connstr = string.Format(connstr, DBServerIP, OracleSID, DBUserName, DBPassword);
  34. conn = new OracleConnection(connstr);
  35. if (conn.State != ConnectionState.Open)
  36. {
  37. conn.Open();
  38. }
  39. }
  40. catch (Exception e)
  41. {
  42. throw new Exception(e.Message.ToString());
  43. }
  44. return conn;
  45. }
  46. #endregion
  47. #region 获取数据源连接符
  48. /// <summary>
  49. /// 数据源ID(GUID)
  50. /// </summary>
  51. /// <param name="dbId"></param>
  52. /// <returns></returns>
  53. public static void GetDataBaseConnect()
  54. {
  55. string PWD = "";
  56. string sql = @"select DBIpAddress,DBName,DBUser,DBPwd from [ICSMES_WXZNSys].dbo.sys_DataBase
  57. WHERE DBSourceName='ORL'";
  58. DataTable data = DBHelper.ExecuteDataset(ConfigurationManager.ConnectionStrings["connstr"].ConnectionString, CommandType.Text, sql).Tables[0];
  59. if (data.Rows.Count != 0)
  60. {
  61. DBServerIP = data.Rows[0]["DBIpAddress"].ToString();
  62. OracleSID = data.Rows[0]["DBName"].ToString();
  63. DBUserName = data.Rows[0]["DBUser"].ToString();
  64. PWD = FromMd5(data.Rows[0]["DBPwd"].ToString());
  65. DBPassword = PWD;
  66. }
  67. }
  68. #endregion
  69. #region 设置OracleCommand对象
  70. /// <param name="cmd">OracleCommand对象 </param>
  71. /// <param name="cmdText">命令文本</param>
  72. /// <param name="cmdType">命令类型</param>
  73. /// <param name="cmdParms">参数集合</param>
  74. private static void SetCommand(OracleCommand cmd, string cmdText, CommandType cmdType, OracleParameter[] cmdParms)
  75. {
  76. cmd.Connection = conn;
  77. cmd.CommandText = cmdText;
  78. cmd.CommandType = cmdType;
  79. if (cmdParms != null)
  80. {
  81. cmd.Parameters.AddRange(cmdParms);
  82. }
  83. }
  84. #endregion
  85. #region 执行相应的Oracle sql语句,返回相应的DataSet对象
  86. /// <param name="sqlstr">sql语句</param>
  87. /// <returns>返回相应的DataSet对象</returns>
  88. public static DataSet GetDataSet(string sqlstr)
  89. {
  90. DataSet set = new DataSet();
  91. try
  92. {
  93. init();
  94. OracleDataAdapter adp = new OracleDataAdapter(sqlstr, conn);
  95. adp.Fill(set);
  96. conn.Close();
  97. }
  98. catch (Exception e)
  99. {
  100. throw new Exception(e.Message.ToString());
  101. }
  102. return set;
  103. }
  104. #endregion
  105. #region 执行sql语句,返回DataSet对象
  106. /// <param name="sqlstr">sql语句</param>
  107. /// <param name="tableName">表名</param>
  108. /// <returns>返回DataSet对象</returns>
  109. public static DataSet GetDataSet(string sqlstr, string tableName)
  110. {
  111. DataSet set = new DataSet();
  112. try
  113. {
  114. init();
  115. OracleDataAdapter adp = new OracleDataAdapter(sqlstr, conn);
  116. adp.Fill(set, tableName);
  117. conn.Close();
  118. }
  119. catch (Exception e)
  120. {
  121. throw new Exception(e.Message.ToString());
  122. }
  123. return set;
  124. }
  125. #endregion
  126. #region 执行不带参数的sql语句,返回受影响的行数
  127. /// <param name="cmdstr">增,删,改sql语句</param>
  128. /// <returns>返回受影响的行数</returns>
  129. public static int ExecuteNonQuery(string cmdText)
  130. {
  131. int count;
  132. try
  133. {
  134. init();
  135. cmd = new OracleCommand(cmdText, conn);
  136. count = cmd.ExecuteNonQuery();
  137. conn.Close();
  138. }
  139. catch (Exception ex)
  140. {
  141. throw new Exception(ex.Message.ToString());
  142. }
  143. return count;
  144. }
  145. #endregion
  146. #region 执行带参数的Oracle sql语句或存储过程,返回行数
  147. /// <param name="cmdText">带参数的sql语句和存储过程名</param>
  148. /// <param name="cmdType">命令类型</param>
  149. /// <param name="cmdParms">参数集合</param>
  150. /// <returns>返回受影响的行数</returns>
  151. public static int ExecuteNonQuery(string cmdText, CommandType cmdType, OracleParameter[] cmdParms)
  152. {
  153. int count;
  154. try
  155. {
  156. init();
  157. cmd = new OracleCommand();
  158. SetCommand(cmd, cmdText, cmdType, cmdParms);
  159. count = cmd.ExecuteNonQuery();
  160. cmd.Parameters.Clear();
  161. conn.Close();
  162. }
  163. catch (Exception ex)
  164. {
  165. throw new Exception(ex.Message.ToString());
  166. }
  167. return count;
  168. }
  169. #endregion
  170. #region 执行不带参数sql语句,返回一个从数据源读取数据的OracleDataReader对象
  171. /// <param name="cmdstr">相应的sql语句</param>
  172. /// <returns>返回一个从数据源读取数据的OracleDataReader对象</returns>
  173. public static OracleDataReader ExecuteReader(string cmdText)
  174. {
  175. OracleDataReader reader;
  176. try
  177. {
  178. init();
  179. cmd = new OracleCommand(cmdText, conn);
  180. reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  181. }
  182. catch (Exception ex)
  183. {
  184. throw new Exception(ex.Message.ToString());
  185. }
  186. return reader;
  187. }
  188. #endregion
  189. #region 执行带参数的sql语句或存储过程,返回一个从数据源读取数据的OracleDataReader对象
  190. /// <param name="cmdText">sql语句或存储过程名</param>
  191. /// <param name="cmdType">命令类型</param>
  192. /// <param name="cmdParms">参数集合</param>
  193. /// <returns>返回一个从数据源读取数据的OracleDataReader对象</returns>
  194. public static OracleDataReader ExecuteReader(string cmdText, CommandType cmdType, OracleParameter[] cmdParms)
  195. {
  196. OracleDataReader reader;
  197. try
  198. {
  199. init();
  200. cmd = new OracleCommand();
  201. SetCommand(cmd, cmdText, cmdType, cmdParms);
  202. reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  203. }
  204. catch (Exception ex)
  205. {
  206. throw new Exception(ex.Message.ToString());
  207. }
  208. return reader;
  209. }
  210. #endregion
  211. #region 执行不带参数sql语句,返回结果集首行首列的值object
  212. /// <param name="cmdstr">相应的sql语句</param>
  213. /// <returns>返回结果集首行首列的值object</returns>
  214. public static object ExecuteScalar(string cmdText)
  215. {
  216. object obj;
  217. try
  218. {
  219. init();
  220. cmd = new OracleCommand(cmdText, conn);
  221. obj = cmd.ExecuteScalar();
  222. conn.Close();
  223. }
  224. catch (Exception ex)
  225. {
  226. throw new Exception(ex.Message.ToString());
  227. }
  228. return obj;
  229. }
  230. #endregion
  231. #region 执行带参数sql语句或存储过程,返回结果集首行首列的值object
  232. /// <param name="cmdText">sql语句或存储过程名</param>
  233. /// <param name="cmdType">命令类型</param>
  234. /// <param name="cmdParms">返回结果集首行首列的值object</param>
  235. /// <returns></returns>
  236. public static object ExecuteScalar(string cmdText, CommandType cmdType, OracleParameter[] cmdParms)
  237. {
  238. object obj;
  239. try
  240. {
  241. init();
  242. cmd = new OracleCommand();
  243. SetCommand(cmd, cmdText, cmdType, cmdParms);
  244. obj = cmd.ExecuteScalar();
  245. conn.Close();
  246. }
  247. catch (Exception ex)
  248. {
  249. throw new Exception(ex.Message.ToString());
  250. }
  251. return obj;
  252. }
  253. #endregion
  254. /// <summary>
  255. /// MD5解密
  256. /// </summary>
  257. /// <param name="str"></param>
  258. /// <returns></returns>
  259. public static string FromMd5(string str)
  260. {
  261. return Decrypt(str, "&%#@?,:*_");
  262. }
  263. /// <summary>
  264. /// 解密
  265. /// </summary>
  266. /// <param name="strText"></param>
  267. /// <param name="sDecrKey"></param>
  268. /// <returns></returns>
  269. private static String Decrypt(String strText, String sDecrKey)
  270. {
  271. Byte[] byKey = { };
  272. Byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
  273. Byte[] inputByteArray = new byte[strText.Length];
  274. try
  275. {
  276. byKey = System.Text.Encoding.UTF8.GetBytes(sDecrKey.Substring(0, 8));
  277. DESCryptoServiceProvider des = new DESCryptoServiceProvider();
  278. inputByteArray = Convert.FromBase64String(strText);
  279. MemoryStream ms = new MemoryStream();
  280. CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);
  281. cs.Write(inputByteArray, 0, inputByteArray.Length);
  282. cs.FlushFinalBlock();
  283. System.Text.Encoding encoding = System.Text.Encoding.UTF8;
  284. return encoding.GetString(ms.ToArray());
  285. }
  286. catch (Exception ex)
  287. {
  288. return ex.Message;
  289. }
  290. }
  291. }
  292. }