tbf/TBF/UI/ResultsMI/DeleteFromOracleForm.cs

387 lines
18 KiB
C#

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.BenchControl.Output.DB.SensusOracle;
using TBF.BenchControl.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<string> pcbNumbers;
public DeleteFromOracleForm()
{
InitializeComponent();
testBenchName = ProcessData.BenchInfo.TestBenchName;
testBenchId = ProcessData.BenchInfo.TestBenchId;
batchNumber = 0;
pcbNumbers = new List<string>();
}
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<int> pruefindexes;
IList<string> waterMeters = GetListOfWaterMeters(conn, batchNr, out pruefindexes);
/// Read this batch tests data from VT_PRUEFDURCHFLUSS_PD
IList<int> testNumbers = new List<int>(); ;
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<string> GetListOfWaterMeters(OracleConnection conn, int batchNr, out IList<int> pruefindexes)
{
IList<string> pcbNrs = new List<string>();
pruefindexes = new List<int>();
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<string> 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;
}
}
}
}