using Oracle.ManagedDataAccess.Client; using System.Data; namespace YLErp.Helpers { public class DbHelper : IDisposable { private readonly OracleConnection _con; private readonly object _syncLock = new object(); private bool _runStatus = false; public DbHelper(string connString) { _con = new OracleConnection(connString); _con.Open(); _runStatus = true; } ~DbHelper() { Dispose(); } public void Dispose() { if (_runStatus) { lock (_syncLock) { if (_runStatus) { _runStatus = false; _con.Close(); _con.Dispose(); } } } } public void ExecuteSql(string sqlStr, Action func) { var cmd = new OracleCommand(sqlStr, _con) { CommandType = CommandType.Text//大容量数据,可以进行修改,使用DataSet和DataAdapter }; using (var dr = cmd.ExecuteReader()) { while (dr.Read()) { func?.Invoke(dr); } } } public DataSet ExecuteSqlQuery(string sqlStr) { var cmd = new OracleCommand(sqlStr, _con) { CommandType = CommandType.Text//大容量数据,可以进行修改,使用DataSet和DataAdapter }; var resultsDataSet = new DataSet(); var adapter = new OracleDataAdapter(cmd); adapter.Fill(resultsDataSet); return resultsDataSet; } public DataTable ExecuteSqlQueryDataTable(string sqlStr) { var cmd = new OracleCommand(sqlStr, _con) { CommandType = CommandType.Text//大容量数据,可以进行修改,使用DataSet和DataAdapter }; var resultsDataTable = new DataTable(); var adapter = new OracleDataAdapter(cmd); adapter.Fill(resultsDataTable); return resultsDataTable; } public void ExecuteNoSqlsQuery(List sqlStrList) { foreach (var itemSql in sqlStrList) { try { LogFactory.GetLogger("ExecuteNoSqlsQuery").Info($"开始执行:{itemSql}"); using (OracleCommand cmd = new OracleCommand()) { cmd.Connection = _con; cmd.CommandText = itemSql; cmd.ExecuteNonQuery(); } } catch (Exception ex) { LogFactory.GetLogger("ExecuteNoSqlsQuery").Error(ex); } LogFactory.GetLogger("ExecuteNoSqlsQuery").Info($"结束执行:{itemSql}"); } } } }