using System; using System.Collections.Generic; using System.Data; using System.Data.OracleClient; using HZQR.Common; namespace DataBaseTransfer.Method { /// /// oracle数据帮助类 /// public class OracleHelper { #region 构造函数 public OracleHelper(string OracleConnStr) { ConnStr = OracleConnStr; } public OracleHelper() { } public OracleHelper(string Server, string Name, string UserName, string UserPwd) { //传入对应的 服务器名称 实例名 用户名 密码 ConnStr = "Data Source=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = " + Server + ")(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = " + Name + "))); User ID=" + UserName + "; PassWord=" + UserPwd; } public OracleHelper(string Server, string Name, string UserName, string UserPwd, string LoginPort) { //传入对应的 服务器名称 实例名 用户名 密码 ConnStr = "Data Source=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = " + Server + ")(PORT = " + LoginPort + "))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = " + Name + "))); User ID=" + UserName + "; PassWord=" + UserPwd; } #endregion #region 属性信息 private string ConnStr = null; public string ConnString { set { ConnStr = value; } get { return ConnStr; } } #endregion #region 获得表名 /// /// 获得数据库表名 /// /// public DataTable GetTableName() { using (OracleConnection OracleConn = new OracleConnection(ConnStr)) { try { OracleConn.Open(); DataTable dt = OracleConn.GetSchema("Tables", null); OracleConn.Close(); return dt; } catch (Exception ex) { throw new Exception(ex.Message); } } } /// /// 获得数据库表名 /// /// public DataTable GetViewName() { using (OracleConnection OracleConn = new OracleConnection(ConnStr)) { try { OracleConn.Open(); DataTable dt = OracleConn.GetSchema("Views", null); OracleConn.Close(); return dt; } catch (Exception ex) { throw new Exception(ex.Message); } } } /// /// 获得数据库表名 /// /// public DataTable GetTableName_Old() { using (OracleConnection oleConn = new OracleConnection(ConnStr)) { DataSet ds = new DataSet(); string SQLString = "select a.TABLE_NAME,b.COMMENTS from user_tables a,user_tab_comments b WHERE a.TABLE_NAME=b.TABLE_NAME order by TABLE_NAME "; try { oleConn.Open(); OracleDataAdapter oleDa = new OracleDataAdapter(SQLString, oleConn); oleDa.Fill(ds, "temp"); } catch (System.Data.OracleClient.OracleException ex) { throw new Exception(ex.Message); } return ds.Tables[0]; } } #endregion #region 测试连接 /// /// 测试连接 /// public void TestConn() { //测试连接 using (OracleConnection OracleConn = new OracleConnection(ConnStr)) { using (OracleCommand cmd = new OracleCommand()) { try { OracleConn.Open(); } catch (System.Data.OracleClient.OracleException ex) { throw new Exception(ex.Message); } finally { OracleConn.Close(); } } } } #endregion #region 执行SQL /// /// 执行SQL语句,返回受影响的行数 /// /// SQL语句 public int ExcuteSql(string SQLString) { using (OracleConnection OracleConn = new OracleConnection(ConnStr)) { using (OracleCommand cmd = new OracleCommand(SQLString, OracleConn)) { try { OracleConn.Open(); int rows = cmd.ExecuteNonQuery(); OracleConn.Close(); return rows; } catch (System.Data.OracleClient.OracleException ex) { LogUtil.WriteLog(ex, SQLString, DateTime.Now.ToString("yyyyMMdd") + "_ExcuteSql"); throw new Exception(ex.Message); } } } } #endregion #region 执行SQL,返回对应的数据集 /// /// 执行SQL,返回对应的数据集 /// /// 执行的SQL语句 /// 内存中的表名 /// 返回对应的数据集 public DataSet ExcuteSqlGetDataSet(string SQLString, string TableName = "Template") { using (OracleConnection oleConn = new OracleConnection(ConnStr)) { DataSet ds = new DataSet(); try { oleConn.Open(); OracleDataAdapter oleDa = new OracleDataAdapter(SQLString, oleConn); oleDa.Fill(ds, TableName); } catch (System.Data.OracleClient.OracleException ex) { LogUtil.WriteLog(ex, SQLString, DateTime.Now.ToString("yyyyMMdd") + "_ExcuteSqlGetDataSet"); throw new Exception(ex.Message); } return ds; } } /// /// 默认取 ExcuteSqlGetDataSet() .Tables[0]; /// /// /// /// public DataTable ExcuteSqlGetDataTable(string SQLString, string TableName = "Template") { return ExcuteSqlGetDataSet(SQLString, TableName).Tables[0]; } #endregion #region 执行SQL事务 public void ExecuteSqlTran(string[] SQLStringArray) { int ExecuteSqlCount = 0; //执行sql语句 ExecuteSqlTran(SQLStringArray, ref ExecuteSqlCount); } /// /// 执行SQL事务 /// /// SQL数组 public void ExecuteSqlTran(string[] SQLStringArray, ref int ExecuteSqlCount) { using (OracleConnection conn = new OracleConnection(ConnStr)) { conn.Open(); using (OracleTransaction trans = conn.BeginTransaction()) { OracleCommand cmd = new OracleCommand(); cmd.Transaction = trans; cmd.Connection = conn; string SQLString = ""; try { //执行SQL for (int i = 0; i < SQLStringArray.Length; i++) { SQLString = SQLStringArray[i]; cmd.CommandText = SQLString; cmd.ExecuteNonQuery(); } trans.Commit(); } catch (Exception ex) { LogUtil.WriteLog(ex, SQLString, DateTime.Now.ToString("yyyyMMdd") + "_ExecuteSqlTran"); trans.Rollback(); throw new Exception(ex.Message); } finally { cmd.Dispose(); trans.Dispose(); } } } } public void ExecuteSqlTran(List SQLStringArray) { int ExecuteSqlCount = 0; //执行sql语句 ExecuteSqlTran(SQLStringArray, ref ExecuteSqlCount); } public void ExecuteSqlTran(List SQLStringArray, ref int ExecuteSqlCount) { using (OracleConnection conn = new OracleConnection(ConnStr)) { conn.Open(); using (OracleTransaction trans = conn.BeginTransaction()) { OracleCommand cmd = new OracleCommand(); cmd.Transaction = trans; cmd.Connection = conn; string SQLString = ""; try { //执行SQL for (int i = 0; i < SQLStringArray.Count; i++) { SQLString = SQLStringArray[i]; cmd.CommandText = SQLString; ExecuteSqlCount += cmd.ExecuteNonQuery(); } trans.Commit(); } catch (Exception ex) { LogUtil.WriteLog(ex, SQLString, DateTime.Now.ToString("yyyyMMdd") + "_ExecuteSqlTran"); trans.Rollback(); throw new Exception(ex.Message); } finally { cmd.Dispose(); trans.Dispose(); } } } } #endregion #region OracleParameter 字段值集合ORACLE数据库操作 /// /// Mr.Cai 2018-7-19 /// 字段值集合ORACLE数据库操作 /// /// SQL及字段集合 public void ExecuteSqlTran(List OracleSQLInfos) { using (OracleConnection conn = new OracleConnection(ConnStr)) { conn.Open(); OracleCommand cmd = new OracleCommand(); cmd.Connection = conn; OracleTransaction tx = conn.BeginTransaction(); cmd.Transaction = tx; try { foreach (OracleSQLInfo oracleSqlInfo in OracleSQLInfos) { cmd.CommandText = oracleSqlInfo.sqlString; foreach (OracleParameter oracleParameter in oracleSqlInfo.sqlStringArray) { cmd.Parameters.Add(oracleParameter); } cmd.ExecuteNonQuery(); } tx.Commit(); } catch (System.Data.OracleClient.OracleException E) { tx.Rollback(); throw new Exception(E.Message); } finally { if (conn.State != ConnectionState.Closed) { conn.Close(); } } } } #endregion #region 更新数据表 public void UpdateDataTable(DataTable dt, string SqlStr) { using (OracleConnection oracleConn = new OracleConnection(ConnStr)) { oracleConn.Open(); try { OracleDataAdapter oleDa = new OracleDataAdapter(SqlStr, oracleConn); OracleCommandBuilder builder = new OracleCommandBuilder(); oleDa.Update(dt); } catch (System.Data.OleDb.OleDbException ex) { throw new Exception(ex.Message); } finally { oracleConn.Close(); } } } public void UpdateDataTable(DataTable ParentTable, DataTable ChildTable, string[] SqlStr, string mainName) { using (OracleConnection oleConn = new OracleConnection(ConnStr)) { DataSet oDs = new DataSet(); oleConn.Open(); try { //父表 OracleDataAdapter oleDa = new OracleDataAdapter(SqlStr[0], oleConn); OracleCommandBuilder builder = new OracleCommandBuilder(oleDa); //子表 OracleDataAdapter oleDa1 = new OracleDataAdapter(SqlStr[1], oleConn); OracleCommandBuilder builder1 = new OracleCommandBuilder(oleDa); oDs.Tables.Add(ParentTable); oDs.Tables.Add(ChildTable); oDs.Relations.Add(new DataRelation("ParentChild", oDs.Tables[0].Columns[mainName], oDs.Tables[1].Columns[mainName])); oleDa.Update(oDs.Tables[0]); oleDa1.Update(oDs.Tables[1]); } catch (System.Data.OracleClient.OracleException ex) { throw new Exception(ex.Message); } finally { oleConn.Close(); } } } #endregion #region 执行SQL,返回第一行第一列 /// /// 执行SQL语句,返回受影响的行数 /// /// SQL语句 public object ExcuteSqlBackData(string SQLString) { using (OracleConnection oleConn = new OracleConnection(ConnStr)) { using (OracleCommand cmd = new OracleCommand()) { try { cmd.Connection = GetConn(oleConn); cmd.CommandText = SQLString; object rows = cmd.ExecuteScalar(); CloseConn(oleConn); return rows; } catch (System.Data.OracleClient.OracleException ex) { throw new Exception(ex.Message); } } } } #endregion #region 打开数据库及关闭数据库 public OracleConnection GetConn(OracleConnection oleConn) { if (oleConn.State == ConnectionState.Closed) { oleConn.Open(); } return oleConn; } public void CloseConn(OracleConnection oleConn) { if (oleConn.State == ConnectionState.Open) { oleConn.Close(); } } #endregion #region 修正表的类型 public void DBTable_GetSchemaFixDataType(DataTable dataTable, string tableName) { DataTable dataTable2 = ExcuteSqlGetDataSet("Select * from " + tableName + " where 1=2", "temp").Tables[0]; //DataTable dataTable2 = _DataBaseHelper.ExecuteDataSet("Select * from " + tableName + " where 1=2").Tables[0]; bool flag = false; foreach (DataRow dataRow in dataTable.Rows) { dataRow["Column_DefaultValue"] = dataRow["Column_DefaultValue"].ToString().Replace(" ", "").Replace("\"", ""); dataRow["Column_IsNullable"] = dataRow["Column_IsNullable"].ToString().ToLower().Replace("no", "False").Replace("yes", "True").Replace("n", "False").Replace("y", "True").Replace("false", "False").Replace("true", "True"); dataRow["Column_IsKey"] = dataRow["Column_IsKey"].ToString().ToLower().Replace("no", "False").Replace("yes", "True").Replace("n", "False").Replace("y", "True").Replace("false", "False").Replace("true", "True"); if (string.IsNullOrEmpty(dataRow["Column_Comment"].ToString())) { dataRow["Column_Comment"] = dataRow["Column_Name"]; } foreach (DataColumn dataColumn in dataTable2.Columns) { if (dataRow["Column_Name"].ToString().ToLower() == dataColumn.ColumnName.ToLower()) { if (dataRow["Column_DataType"].ToString() != "System.Double") { dataRow["Column_DataType"] = dataColumn.DataType.ToString(); break; } break; } } if (dataRow["Column_IsKey"].ToString() == "True") { flag = true; } } if (!flag) { string text = string.Empty; if (tableName.IndexOf("_") >= 0) { text = tableName.Substring(tableName.IndexOf("_") + 1); } else { text = tableName; } text += "_ID"; foreach (DataRow dataRow2 in dataTable.Rows) { if (dataRow2["Column_Name"].ToString() == text) { dataRow2["Column_IsKey"] = "True"; break; } } } dataTable.AcceptChanges(); } #endregion #region OracleSQLInfo对象 /// /// OracleSQLInfo对象 /// public class OracleSQLInfo { /// /// SQL语句 /// public string sqlString; /// /// SQL语句数组 /// public List sqlStringArray; } #endregion } }