using System; using System.Collections.Generic; using System.Text; //using System.Data.OracleClient; using System.Data; using Oracle.ManagedDataAccess.Client; using HZQR.Common; namespace JobApplication { public class OracleHelper { #region 构造函数 public OracleHelper(string OracleConnStr) { ConnStr = OracleConnStr; } public OracleHelper() { } public OracleHelper(string Server, string Port, string Name, string UserName, string UserPwd) { //传入对应的 服务器名称 实例名 用户名 密码 ConnStr = "Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = " + Server + ")(PORT = " + Port + "))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = " + Name + "))); User ID=" + UserName + "; PassWord=" + UserPwd + ";Connection Timeout=5;"; } #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 (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 (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 (OracleException ex) { 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 (OracleException ex) { throw new Exception(ex.Message); } return ds; } } #endregion #region 执行SQL事务 public void ExecuteSqlTran(string SQLString) { using (OracleConnection conn = new OracleConnection(ConnStr)) { conn.Open(); using (OracleTransaction trans = conn.BeginTransaction()) { OracleCommand cmd = new OracleCommand(); cmd.Transaction = trans; cmd.Connection = conn; try { //执行SQL cmd.CommandText = SQLString; cmd.ExecuteNonQuery(); trans.Commit(); } catch (Exception ex) { trans.Rollback(); throw new Exception(ex.Message); } finally { cmd.Dispose(); trans.Dispose(); } } } } /// /// 执行SQL事务 /// /// SQL数组 public void ExecuteSqlTran(string[] SQLStringArray) { using (OracleConnection conn = new OracleConnection(ConnStr)) { conn.Open(); using (OracleTransaction trans = conn.BeginTransaction()) { OracleCommand cmd = new OracleCommand(); cmd.Transaction = trans; cmd.Connection = conn; string sql = ""; try { //执行SQL for (int i = 0; i < SQLStringArray.Length; i++) { cmd.CommandText = SQLStringArray[i]; sql = cmd.CommandText; cmd.ExecuteNonQuery(); } trans.Commit(); } catch (Exception ex) { LogUtil.WriteLog("sql=" + sql); trans.Rollback(); throw new Exception(ex.Message); } finally { cmd.Dispose(); trans.Dispose(); } } } } public void ExecuteSqlTran(List SQLStringArray) { using (OracleConnection conn = new OracleConnection(ConnStr)) { conn.Open(); using (OracleTransaction trans = conn.BeginTransaction()) { OracleCommand cmd = new OracleCommand(); cmd.Transaction = trans; cmd.Connection = conn; try { //执行SQL for (int i = 0; i < SQLStringArray.Count; i++) { cmd.CommandText = SQLStringArray[i].ToString(); cmd.ExecuteNonQuery(); } trans.Commit(); } catch (Exception ex) { trans.Rollback(); throw new Exception(ex.Message); } finally { cmd.Dispose(); trans.Dispose(); } } } } #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 (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 (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 } }