using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using NHibernate; #if MANAGED using Oracle.ManagedDataAccess.Client; #else using Oracle.DataAccess.Client; #endif using Common; using TBF.Resources; using TBF.Rig.Output.DB.SensusOracle; using TBF.Rig.Sequences; namespace TBF.UI.ResultsMI { enum WMType { Iperl, S620, S640, } public partial class DeleteFromOracleForm : Form { string testBenchName; int testBenchId; WMType wmType; bool deleteBatch; int batchNumber; IList pcbNumbers; public DeleteFromOracleForm() { InitializeComponent(); testBenchName = ProcessData.BenchInfo.TestBenchName; testBenchId = ProcessData.BenchInfo.TestBenchId; batchNumber = 0; pcbNumbers = new List(); } bool GetSelection() { wmType = iPerlRadioButton.Checked ? WMType.Iperl : s620RadioButton.Checked ? WMType.S620 : WMType.S640; deleteBatch = batchRadioButton.Checked; if (!int.TryParse(batchNrTextBox.Text, out batchNumber) || batchNumber <= 0) { batchNumber = 0; } pcbNumbers.Clear(); string[] items = waterMetersTextBox.Text.Split(new char[] { ',', ';', '\r', '\n' }); foreach (var item in items) { string itm = item.Trim(); if (itm.Length == 12) pcbNumbers.Add(itm); } return true; } private void startButton_Click(object sender, EventArgs e) { activityTextBox.Text = string.Empty; if (!GetSelection()) { MessageBox.Show("Invalid selection of data to be deleted"); return; } OracleConnection conn; /// if (ProcessData.OracleDB == null || ProcessData.OracleDB.DebugLevel != DebugMode.Normal) { MessageBox.Show("No Oracle database or it is in simulation mode"); return; } else { switch (DBUsed.Production) { default: case DBUsed.Production: conn = ProcessData.OracleDB.ProductionDB; break; case DBUsed.Quality: conn = ProcessData.OracleDB.QualityDB; break; case DBUsed.Test: conn = ProcessData.OracleDB.TestDB; break; } if (conn == null) { MessageBox.Show("No connection to Oracle database"); return; } } /// TODO: Implement database selection MessageBox.Show(string.Format("Výsledky budú zapísané do produkčnej databázy"), Strings.Information, MessageBoxButtons.OK, MessageBoxIcon.Information); if (deleteBatch) { activityTextBox.Text = string.Format("Going to delete batch {0}{1}", batchNumber, Environment.NewLine); if (!DeleteBatch(conn, batchNumber)) { MessageBox.Show(string.Format("Deleting batch {0} failed", batchNumber)); } } else { activityTextBox.Text = string.Format("Going to delete water meters:{0}", Environment.NewLine); foreach (var pcb in pcbNumbers) { activityTextBox.Text += string.Format("{0}{1}", pcb, Environment.NewLine); } if (!DeleteWaterMeters(conn, pcbNumbers)) { MessageBox.Show("Deleting iPERL-s failed"); } } } bool DeleteBatch(OracleConnection conn, int batchNr) { OracleCommand cmd; OracleDataReader dr; int deletedRows; try { conn.Open(); /// Open the Oracle database } catch (Exception exc) { activityTextBox.Text += string.Format("Cannot open Oracle database: {0}", exc.Message); conn.Close(); return false; } /// Get a list of water meters IList pruefindexes; IList waterMeters = GetListOfWaterMeters(conn, batchNr, out pruefindexes); /// Read this batch tests data from VT_PRUEFDURCHFLUSS_PD IList testNumbers = new List(); ; cmd = new OracleCommand("SELECT pruefungsnr " + "FROM vt_pruefdurchfluss_pd " + "WHERE anbid = :1 AND id_pruefstand = :2 AND id_wzpruefreihe = :3", conn); cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer }); cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Int32, Value = 18000 + testBenchId }); cmd.Parameters.Add(new OracleParameter { ParameterName = "3", OracleDbType = OracleDbType.Int32, Value = batchNr }); /// dr = cmd.ExecuteReader(); bool found = false; while (dr.Read()) { int i = 0; int pruefungsnr = dr.GetInt32(i++); testNumbers.Add(pruefungsnr); activityTextBox.Text += string.Format("pruefungsnr = {0} found in table vt_pruefdurchfluss_p, batch = {1}{2}", pruefungsnr, batchNr, Environment.NewLine); found = true; } dr.Close(); if (!found) activityTextBox.Text += string.Format("Nothing found in table vt_pruefdurchfluss_pd, batch = {0}{1}", batchNr, Environment.NewLine); /// Transaction start OracleTransaction transaction = conn.BeginTransaction(); /// /// Delete water meters /// try { for (int i = 0; i < waterMeters.Count; i++) { string pcbNr = waterMeters[i]; int pruefindex = pruefindexes[i] % 100; /// foreach (var pruefungsnr in testNumbers) { cmd = new OracleCommand("DELETE FROM vt_pruefreihe_ist_pd " + "WHERE anbid = :1 AND vt_fernum = :2 AND pruefungsnr = :3 AND pruefindex = :4", conn); cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer }); cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Varchar2, Value = pcbNr }); cmd.Parameters.Add(new OracleParameter { ParameterName = "3", OracleDbType = OracleDbType.Int32, Value = pruefungsnr }); cmd.Parameters.Add(new OracleParameter { ParameterName = "4", OracleDbType = OracleDbType.Int32, Value = 100 * testBenchId + pruefindex }); /// deletedRows = cmd.ExecuteNonQuery(); activityTextBox.Text += string.Format("{0} rows deleted from vt_pruefreihe_ist_pd, pcb# = {1}, test# = {2}{3}", deletedRows, pcbNr, pruefungsnr, Environment.NewLine); } if (wmType == WMType.Iperl) { cmd = new OracleCommand("DELETE FROM vt_ip_zaehler_pindex_pd " + "WHERE anbid = :1 AND vt_fernum = :2 AND pruefindex = :3", conn); cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer }); cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Varchar2, Value = pcbNr }); cmd.Parameters.Add(new OracleParameter { ParameterName = "3", OracleDbType = OracleDbType.Int32, Value = 100 * testBenchId + pruefindex }); /// deletedRows = cmd.ExecuteNonQuery(); activityTextBox.Text += string.Format("{0} rows deleted from vt_ip_zaehler_pindex_pd, pcb# = {1}{2}", deletedRows, pcbNr, Environment.NewLine); } cmd = new OracleCommand("DELETE FROM vt_zaehler_pindex_pd " + "WHERE anbid = :1 AND vt_fernum = :2 AND pruefindex = :3", conn); cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer }); cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Varchar2, Value = pcbNr }); cmd.Parameters.Add(new OracleParameter { ParameterName = "3", OracleDbType = OracleDbType.Int32, Value = 100 * testBenchId + pruefindex }); /// deletedRows = cmd.ExecuteNonQuery(); activityTextBox.Text += string.Format("{0} rows deleted from vt_zaehler_pindex_pd, pcb# = {1}{2}", deletedRows, pcbNr, Environment.NewLine); cmd = new OracleCommand("DELETE FROM vt_zaehler_pd " + "WHERE anbid = :1 AND vt_fernum = :2", conn); cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer }); cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Varchar2, Value = pcbNr }); /// deletedRows = cmd.ExecuteNonQuery(); activityTextBox.Text += string.Format("{0} rows deleted from vt_zaehler_pd, pcb# = {1}{2}", deletedRows, pcbNr, Environment.NewLine); } /// /// Delete (common) batch data /// cmd = new OracleCommand("DELETE FROM vt_pruefdurchfluss_pd " + "WHERE anbid = :1 AND id_pruefstand = :2 AND id_wzpruefreihe = :3", conn); cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer }); cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Int32, Value = 18000 + testBenchId }); cmd.Parameters.Add(new OracleParameter { ParameterName = "3", OracleDbType = OracleDbType.Int32, Value = batchNr }); /// deletedRows = cmd.ExecuteNonQuery(); activityTextBox.Text += string.Format("{0} rows deleted from vt_pruefdurchfluss_pd, batchNr# = {1}{2}", deletedRows, batchNr, Environment.NewLine); cmd = new OracleCommand("DELETE FROM vt_pruefreihe_pd " + "WHERE anbid = :1 AND id_pruefstand = :2 AND id_wzpruefreihe = :3", conn); cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer }); cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Int32, Value = 18000 + testBenchId }); cmd.Parameters.Add(new OracleParameter { ParameterName = "3", OracleDbType = OracleDbType.Int32, Value = batchNr }); /// deletedRows = cmd.ExecuteNonQuery(); activityTextBox.Text += string.Format("{0} rows deleted from vt_pruefreihe_pd, batchNr# = {1}{2}", deletedRows, batchNr, Environment.NewLine); /// Transaction end transaction.Commit(); conn.Close(); activityTextBox.Text += string.Format("Successfully completed"); return true; } catch (Exception exc) { transaction.Rollback(); conn.Close(); activityTextBox.Text += string.Format("Transaction failed: {0}{1}", exc.Message, Environment.NewLine); return false; } } IList GetListOfWaterMeters(OracleConnection conn, int batchNr, out IList pruefindexes) { IList pcbNrs = new List(); pruefindexes = new List(); OracleCommand cmd; OracleDataReader dr; cmd = new OracleCommand("SELECT vt_fernum, pruefindex " + "FROM vt_zaehler_pindex_pd " + "WHERE anbid = :1 AND id_pruefstand = :2 AND id_wzpruefreihe = :3", conn); cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer }); cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Int32, Value = 18000 + testBenchId }); cmd.Parameters.Add(new OracleParameter { ParameterName = "3", OracleDbType = OracleDbType.Int32, Value = batchNr }); dr = cmd.ExecuteReader(); activityTextBox.Text += string.Format("Water meters:{0}", Environment.NewLine); while (dr.Read()) { int i = 0; string pcbNr = dr.GetString(i++); pcbNrs.Add(pcbNr); pruefindexes.Add(dr.GetInt32(i++)); activityTextBox.Text += string.Format("{0}, ", pcbNr); } dr.Close(); activityTextBox.Text += Environment.NewLine; activityTextBox.Text += Environment.NewLine; return pcbNrs; } bool DeleteWaterMeters(OracleConnection conn, IList waterMeters) { OracleCommand cmd; OracleDataReader dr; int deletedRows; try { conn.Open(); /// Open the Oracle database } catch (Exception exc) { activityTextBox.Text += string.Format("Cannot open Oracle database: {0}", exc.Message); conn.Close(); return false; } /// Transaction start OracleTransaction transaction = conn.BeginTransaction(); /// /// Delete water meters /// try { for (int i = 0; i < waterMeters.Count; i++) { string pcbNr = waterMeters[i]; /// cmd = new OracleCommand("DELETE FROM vt_pruefreihe_ist_pd " + "WHERE anbid = :1 AND vt_fernum = :2", conn); cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer }); cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Varchar2, Value = pcbNr }); /// deletedRows = cmd.ExecuteNonQuery(); activityTextBox.Text += string.Format("{0} rows deleted from vt_pruefreihe_ist_pd, pcb# = {1}{2}", deletedRows, pcbNr, Environment.NewLine); if (wmType == WMType.Iperl) { cmd = new OracleCommand("DELETE FROM vt_ip_zaehler_pindex_pd " + "WHERE anbid = :1 AND vt_fernum = :2", conn); cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer }); cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Varchar2, Value = pcbNr }); /// deletedRows = cmd.ExecuteNonQuery(); activityTextBox.Text += string.Format("{0} rows deleted from vt_ip_zaehler_pindex_pd, pcb# = {1}{2}", deletedRows, pcbNr, Environment.NewLine); } cmd = new OracleCommand("DELETE FROM vt_zaehler_pindex_pd " + "WHERE anbid = :1 AND vt_fernum = :2", conn); cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer }); cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Varchar2, Value = pcbNr }); /// deletedRows = cmd.ExecuteNonQuery(); activityTextBox.Text += string.Format("{0} rows deleted from vt_zaehler_pindex_pd, pcb# = {1}{2}", deletedRows, pcbNr, Environment.NewLine); cmd = new OracleCommand("DELETE FROM vt_zaehler_pd " + "WHERE anbid = :1 AND vt_fernum = :2", conn); cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = ProcessData.OracleDB.Anbid_Producer }); cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Varchar2, Value = pcbNr }); /// deletedRows = cmd.ExecuteNonQuery(); activityTextBox.Text += string.Format("{0} rows deleted from vt_zaehler_pd, pcb# = {1}{2}", deletedRows, pcbNr, Environment.NewLine); } /// Transaction end transaction.Commit(); conn.Close(); activityTextBox.Text += string.Format("Successfully completed"); return true; } catch (Exception exc) { transaction.Rollback(); conn.Close(); activityTextBox.Text += string.Format("Transaction failed: {0}{1}", exc.Message, Environment.NewLine); return false; } } private void DeleteFromOracleForm_FormClosing(object sender, FormClosingEventArgs e) { if (Users.CurrentUser.Restore(this)) Program.MainWnd.UpdateUser(); } } }