using Oracle.ManagedDataAccess.Client; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; namespace DataexchangeServer.Helper { public class OracleDb { //public static string connectionString = "Data Source = 192.168.1.19; Persist Security Info=True;User ID = abtdev; Password=abt_dev"; public static string connectionString = "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.13)(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = jfprd; Password=jf_prd"; private OracleTransaction _transaction; private readonly string _connectionString; private OracleConnection _connection4Tran; private readonly Queue _transactionTaskList; public OracleDb(string connectionString) { _transactionTaskList = new Queue(); this._connectionString = connectionString; } public DataTable ExecuteDataTable(string sql) { return this.ExecuteDataTable(sql, CommandType.Text, null); } private DataTable ExecuteDataTable(string sql, CommandType commandType, OracleParameter[] parameters) { DataTable dataTable = new DataTable(Guid.NewGuid().ToString()); using (OracleConnection connection = new OracleConnection(connectionString)) { using (OracleCommand command = new OracleCommand(sql, connection)) { command.CommandType = commandType; if (parameters != null) { foreach (OracleParameter parameter in parameters) { command.Parameters.Add(parameter); } } new OracleDataAdapter(command).Fill(dataTable); } } return dataTable; } public object ExecuteScalar(string sql) { return this.ExecuteScalar(sql, CommandType.Text, null); } private object ExecuteScalar(string sql, CommandType commandType, OracleParameter[] parameters) { object obj2; using (OracleConnection connection = new OracleConnection(connectionString)) { using (OracleCommand command = new OracleCommand(sql, connection)) { command.CommandType = commandType; if (parameters != null) { foreach (OracleParameter parameter in parameters) { command.Parameters.Add(parameter); } } connection.Open(); obj2 = command.ExecuteScalar(); } } return obj2; } public bool SaveDataToDB(DataTable dataTable) { //dataTable.AcceptChanges(); //foreach (DataRow drTemp in dataTable.Rows) //{ // drTemp.SetAdded(); //} try { using (OracleConnection connection = new OracleConnection(connectionString)) { using (OracleCommand command = new OracleCommand("select * from " + dataTable.TableName+" WHERE 1<>1", connection)) { OracleDataAdapter adapter = new OracleDataAdapter(command); OracleCommandBuilder builder = new OracleCommandBuilder(adapter); DataTable dsNew = new DataTable(); int count = adapter.Fill(dsNew); //for (int i = 0; i < dataTable.Rows.Count; i++) //{ // DataRow dr = dsNew.NewRow(); // for (int j = 0; j < dataTable.Columns.Count; j++) // { // dr[dsNew.Columns[j].ColumnName] = dataTable.Rows[i][j]; // } // dsNew.Rows.Add(dr); //} count = adapter.Update(dataTable); adapter.UpdateBatchSize = 5000; //adapter.Update(dataTable); return true; //DataTable tbchange = dataTable.GetChanges(); //if (tbchange != null) // try // { // adapter.Update(dataTable); // } // catch (Exception) // { // return false; // } } } } catch (Exception) { return false; } // return true; } private class SqlTask { public string Text { get; private set; } public CommandType CommandType { get; private set; } public OracleParameter[] Parameters { get; private set; } public SqlTask(string text, CommandType commandType, OracleParameter[] paras) { Text = text; CommandType = commandType; Parameters = paras; } } /// /// 执行一条计算查询结果语句,返回查询结果(object)。 /// /// 计算查询结果语句 /// 查询结果(object) public object GetSingle(string SQLString) { using (OracleConnection connection = new OracleConnection(connectionString)) { using (OracleCommand cmd = new OracleCommand(SQLString, connection)) { try { connection.Open(); object obj = cmd.ExecuteScalar(); if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { return null; } else { return obj; } } catch (OracleException e) { connection.Close(); throw new Exception(e.Message); } } } } public int ExecuteNonQuery(string sql) { return this.ExecuteNonQuery(sql, CommandType.Text, null); } private int ExecuteNonQuery(string sql, CommandType commandType, OracleParameter[] parameters) { return this.ExecuteNonQuery(sql, commandType, parameters, false); } private int ExecuteNonQuery(string sql, CommandType commandType, OracleParameter[] parameters, bool joinTransaction) { int num; OracleCommand command; if (joinTransaction) { if ((this._transaction == null) || (this._connection4Tran == null)) { throw new Exception("事务未初始化!"); } _transactionTaskList.Enqueue(new SqlTask(sql, commandType, parameters)); } using (OracleConnection connection = new OracleConnection(connectionString)) { using (OracleCommand commandt = new OracleCommand(sql, connection)) { commandt.CommandType = commandType; if (parameters != null) { foreach (OracleParameter parameter in parameters) { commandt.Parameters.Add(parameter); } } connection.Open(); num = commandt.ExecuteNonQuery(); } } return num; } /// /// 执行多条SQL语句,实现数据库事务。 /// /// 多条SQL语句 public bool ExecuteSqlTran(ArrayList SQLStringList) { using (OracleConnection conn = new OracleConnection(connectionString)) { conn.Open(); OracleCommand cmd = new OracleCommand(); cmd.Connection = conn; OracleTransaction tx = conn.BeginTransaction(); cmd.Transaction = tx; try { for (int n = 0; n < SQLStringList.Count; n++) { string strsql = SQLStringList[n].ToString(); if (strsql.Trim().Length > 1) { cmd.CommandText = strsql; cmd.ExecuteNonQuery(); } } tx.Commit(); return true; } catch (OracleException E) { tx.Rollback(); return false; } } } } }