/// /// Copyright (c) 2015 Sensus Metering Systems /// using System; using System.Collections.Generic; using System.IO; using log4net; using Oracle.DataAccess.Client; // ODP.NET Oracle managed provider using Oracle.DataAccess.Types; using Config.Entities; using TBF.BenchControl; using TBF.Resources; namespace TBF.BenchControl.DB.SensusOracle { public enum Retv { OK, Error, } public class Database : ComponentBase, IOperation, GenericDevices.IResultsWriter, Generic.IDevice { private static readonly ILog log = LogManager.GetLogger(typeof(Database)); public override string ToString() { return string.Format("ResultsWriters.Basic({0})", Cfg.ToString(1)); } const int Anbid_StaraTura = 4; readonly DatabaseCfg dbCfg; string separatorStr; OracleConnection conn; /// Oracle database connection /// /// Result items to print /// IList rsltItems; /// /// Results to print /// Results.Entities.Batch batch; StreamWriter writer; bool batchDataSaved; /// This is to save batch data (VT_PRUEFREIHE_PD) only once public Database() {} public Database(DatabaseCfg cfg) : base(cfg) { dbCfg = cfg; switch (cfg.Separator) { default: case Separator.None: separatorStr = string.Empty; break; case Separator.Space: separatorStr = " "; break; case Separator.Tabulator: separatorStr = "\t"; break; case Separator.Comma: separatorStr = ","; break; case Separator.Semicolon: separatorStr = ";"; break; } log.Debug(this.ToString()); } public void Initialize() { if (dbCfg.DBUsed == DBUsed.Test) { conn = new OracleConnection("Data Source=STARA_TEST.WORLD;User Id=deltachef;Password=deltachef;"); } else if (dbCfg.DBUsed == DBUsed.Production) { conn = new OracleConnection("Data Source=STARA01.WORLD;User Id=deltachef;Password=deltachef;"); } else if (dbCfg.DBUsed == DBUsed.Quality) { /// Temporarily use test database conn = new OracleConnection("Data Source=STARA_TEST.WORLD;User Id=deltachef;Password=deltachef;"); } if (dbCfg.DebugLevel == DebugMode.Simulate) return; /// /// Do something with the database to see if the connection works well /// conn.Open(); string rslt = "none"; OracleCommand cmd = new OracleCommand("select Standort from ANBIETER_SD where ANBID = 4", conn); OracleDataReader dr = cmd.ExecuteReader(); if (dr.Read()) rslt = dr.GetString(0); dr.Close(); conn.Close(); } public void RunDeviceBefore() {} public void RunDeviceAfter() {} public void StopDevice() { if (conn != null) conn.Dispose(); } /// /// Eliminate spaces conditionally, depesing on bool WriterCfg.EliminateSpaces /// /// Input string /// Output string string ElSpaces(string item) { if (dbCfg.EliminateSpaces) return item.Replace(" ", string.Empty); else return item; } /// /// Returns a file name derived from a DateTime structure. /// Creates directories on this path as a side effect. /// /// Date and time /// File name string GetFilename(DateTime time) { string directory = dbCfg.DestinationPath; /// Ends with "\\"; Directory.CreateDirectory(directory); if (dbCfg.YearFolders) { directory = string.Format("{0}{1}\\", directory, time.Year.ToString()); Directory.CreateDirectory(directory); } if (dbCfg.MonthFolders) { string monthStr /* = now.Month.ToString("D2")*/; switch (time.Month) { default: case 1: monthStr = "January"; break; case 2: monthStr = "February"; break; case 3: monthStr = "March"; break; case 4: monthStr = "April"; break; case 5: monthStr = "May"; break; case 6: monthStr = "June"; break; case 7: monthStr = "July"; break; case 8: monthStr = "August"; break; case 9: monthStr = "September"; break; case 10: monthStr = "October"; break; case 11: monthStr = "November"; break; case 12: monthStr = "December"; break; } directory = string.Format("{0}{1}\\", directory, monthStr); Directory.CreateDirectory(directory); } if (dbCfg.DayFolders) { directory = string.Format("{0}{1}\\", directory, time.Day.ToString("D2")); Directory.CreateDirectory(directory); } return string.Format("{0}{1}{2}{3}-{4}{5}.txt", directory, (time.Year % 100).ToString("D2"), time.Month.ToString("D2"), time.Day.ToString("D2"), time.Hour.ToString("D2"), time.Minute.ToString("D2")); } /// /// Writes the test cycle results into a file, Events: Event.ResultsWritten /// /// Procedure to print the results of /// Results to write into the file /// Reference to the operation public IOperation WriteResultsOp(Results.Entities.Batch batch) { this.batch = batch; if (batch.WaterMeters.Count > 0 && !batch.WaterMeters[0].Compound()) { rsltItems = Results.ItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Disk_SingleWM); } else { rsltItems = Results.ItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Disk_CombinedWM); } try { writer = new StreamWriter(System.IO.File.Create(GetFilename(batch.EndTime))); } catch { writer = null; } return this; } /// Start this operation public void Start() { } /// Run this operation /// Event.ResultsWritten or Event.Error public Event Run() { if (batch.WaterMeters.Count == 0) return Event.ResultsWritten; bool anyError = false; #if IPERLST if (dbCfg.DebugLevel != DebugMode.Simulate) { if (WriteResultsToDatabase(batch) == Retv.Error) anyError = true; } #endif if (WriteResultsToDisk(batch) == Retv.Error) anyError = true; if (anyError) { return Event.ResultsNotWritten; } else { return Event.ResultsWritten; } } /// Stop this operation public void Stop() { } public Retv WriteResultsToDisk(Results.Entities.Batch batch) { if (writer == null) return Retv.Error; try { ///---------- /// Header ///---------- writer.WriteLine(batch.ProtocolTitle); writer.WriteLine(string.Empty); string[] leftColumn = new string[] { "Batch number: ", "Date and time: ", "Procedure:", Strings.User_, "Ambient temperature: ", "Ambient pressure: ", "Ambient humidity: ", }; string[] rightColumn = new string[] { batch.BatchNr.ToString(), //batch.EndTime.ToShortDateString() + " " + batch.EndTime.ToShortTimeString(), string.Format("{0}.{1}.{2} {3}:{4}", batch.EndTime.Year.ToString("D4"), batch.EndTime.Month.ToString("D2"), batch.EndTime.Day.ToString("D2"), batch.EndTime.Hour.ToString("D2"), batch.EndTime.Minute.ToString("D2")), batch.ProcedureName, batch.UserName, batch.AmbientTempAve().ToString("F1") + " °C", batch.AmbientPressAve().ToString("F0") + " mbar", batch.AmbientHumiAve().ToString("F0") + " %", }; /// Determine max. left column width in characters int maxLen = 0; foreach (var s in leftColumn) if (s.Length > maxLen) maxLen = s.Length; /// Write aligned columns for (int i = 0; i < Math.Min(leftColumn.Length, rightColumn.Length); i++) { writer.Write(leftColumn[i]); writer.Write(new string(' ', maxLen - leftColumn[i].Length + 3)); writer.WriteLine(rightColumn[i]); } writer.WriteLine(string.Empty); ///-------- /// Body ///-------- foreach (var wMtr in batch.WaterMeters) WriteWM(wMtr); /// Close the file writer.Close(); writer = null; } catch (Exception exc) { log.ErrorFormat("Results not saved to disk: {0}", exc.Message); return Retv.Error; } return Retv.OK; /// OK } /// /// Write one water meter results /// /// Water meter number (0-based) void WriteWM(Results.Entities.WaterMeter wm) { /// Determine column widths int[] columnWidths = new int[rsltItems.Count]; int totalWidth = 0; for (int i = 0; i < rsltItems.Count; i++) { columnWidths[i] = ElSpaces(rsltItems[i].ClmnHeaderText).Length; foreach (var mtr in wm.MeterTestRslts) { string itemText; if (!wm.Compound()) { /// Single water meter itemText = rsltItems[i].Print(mtr); } else if (mtr.CompoundMeterId == (byte)CompoundMeterId.Compound) { Results.Entities.MeterTestRslt mainMtr = wm.GetMeterTestRslt(mtr.Name(), CompoundMeterId.CompoundMain); Results.Entities.MeterTestRslt auxMtr = wm.GetMeterTestRslt(mtr.Name(), CompoundMeterId.CompoundAux); itemText = rsltItems[i].PrintCombined(mainMtr, auxMtr, mtr); } else { continue; } /// Strip color information string[] texts = itemText.Split(new char[] { '|' }); if (texts.Length == 2) { itemText = texts[0]; } int len = ElSpaces(itemText).Length; if (len > columnWidths[i]) columnWidths[i] = len; } totalWidth += columnWidths[i]; } totalWidth += 3 * (rsltItems.Count - 1); if (totalWidth < 0) totalWidth = 0; /// Write water meter number and s/n writer.Write(string.Format("Water meter {0}", wm.WMPosition)); if (!string.IsNullOrEmpty(wm.SerialNr)) writer.Write(string.Format(" s/n: {0}", wm.SerialNr)); writer.WriteLine(string.Empty); writer.WriteLine(new String('-', totalWidth)); /// Horizontal line above the header /// Write column headers for (int i = 0; i < rsltItems.Count; i++) { writer.Write(ElSpaces(rsltItems[i].ClmnHeaderText)); if (i < rsltItems.Count - 1) { if (!dbCfg.EliminateSpaces) { writer.Write(new string(' ', columnWidths[i] - rsltItems[i].ClmnHeaderText.Length + 3)); } writer.Write(separatorStr); } else { writer.WriteLine(string.Empty); } } writer.WriteLine(new String('-', totalWidth)); /// Horizontal line between the header and the body /// Write table data foreach (var mtr in wm.MeterTestRslts) { if (mtr != null) { for (int i = 0; i < rsltItems.Count; i++) { string itemText; /// /// Fetch an item /// if (!wm.Compound()) { /// Single water meter itemText = rsltItems[i].Print(mtr); } else if (mtr.CompoundMeterId == (byte)CompoundMeterId.Compound) { Results.Entities.MeterTestRslt mainMtr = wm.GetMeterTestRslt(mtr.Name(), CompoundMeterId.CompoundMain); Results.Entities.MeterTestRslt auxMtr = wm.GetMeterTestRslt(mtr.Name(), CompoundMeterId.CompoundAux); itemText = rsltItems[i].PrintCombined(mainMtr, auxMtr, mtr); } else { continue; } /// /// Print the item /// string[] texts = itemText.Split(new char[] { '|' }); if (texts.Length == 2) { itemText = texts[0]; } /// Strip color information writer.Write(ElSpaces(itemText)); if (i < rsltItems.Count - 1) { if (!dbCfg.EliminateSpaces) { writer.Write(new string(' ', columnWidths[i] - itemText.Length + 3)); } writer.Write(separatorStr); } else { writer.WriteLine(string.Empty); } } } } writer.WriteLine(new String('-', totalWidth)); /// Horizontal line below the body writer.WriteLine(string.Empty); } #if IPERLST public Retv WriteResultsToDatabase(Results.Entities.Batch batch) { conn.Open(); /// Open the Oracle database OracleTransaction transaction = conn.BeginTransaction(); try { SaveBatchData(batch); foreach (var wMtr in batch.WaterMeters) { SaveSingleWM2DB(wMtr); } transaction.Commit(); } catch (Exception exc) { transaction.Rollback(); log.ErrorFormat("Results of batch {0} not writen to ORACLE database: {1}", batch.BatchNr, exc.Message); conn.Close(); return Retv.Error; } conn.Close(); return Retv.OK; } /// /// Write one meter results into the database /// /// 0-based water meter number /// Sorted list of results to save void SaveSingleWM2DB(Results.Entities.WaterMeter wm) { if (string.IsNullOrEmpty(wm.SerialNr)) return; /// No database activity possible w/o PCB number /// /// Read a list of all prufindexes for a given PCB Number /// IList pruefindexes = new List(); { OracleParameter parm = new OracleParameter(); parm.OracleDbType = OracleDbType.Varchar2; parm.Value = wm.SerialNr; OracleCommand cmd1 = new OracleCommand("SELECT MAX_Pruefindex FROM VT_ZAEHLER_PD WHERE VT_Fernum = :1 AND ANBID = 4", conn); cmd1.Parameters.Add(parm); OracleDataReader dr = cmd1.ExecuteReader(); while (dr.Read()) { pruefindexes.Add(dr.GetInt32(0)); } dr.Close(); } /// /// Determine MAX_Pruefindex /// int maxpruefindexLowPart = 0; foreach (var v in pruefindexes) { if ((v % 100) > maxpruefindexLowPart) maxpruefindexLowPart = (v % 100); } int MAX_Pruefindex = 100 * dbCfg.TestBenchId + maxpruefindexLowPart + 1; int Hydr_Pruefung; if (wm.Passed) { /// Passed if (maxpruefindexLowPart == 0) Hydr_Pruefung = 96; else Hydr_Pruefung = 224; } else { /// Failed Hydr_Pruefung = 97; /// Hydr. test failed, Pressure test passed } SaveOrUpdateWM(wm, MAX_Pruefindex, Hydr_Pruefung); } /// /// Save common batch data /// /// Batch int SaveBatchData(Results.Entities.Batch b) { OracleCommand cmd = new OracleCommand("INSERT INTO VT_PRUEFREIHE_PD(" + "ANBID, ID_Pruefstand, ID_WzPruefreihe, ID_WZTyp, Rev_WZTyp, Rev_Pruefstand_WZTyp, " + "StartDatumZeit, EndDatumZeit, Betriebsart, QVzKontakt, " + "FuellenBegDruck, DruckEvakVorne, DruckEvakHinten, DruckBeiAbpressen, " + "Druckentwaessern, SpuelDurchflussIst, ProgrammVersion)" + " VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17)", conn); OracleParameter parm; parm = new OracleParameter("ANBID", OracleDbType.Int32); parm.Value = Anbid_StaraTura; cmd.Parameters.Add(parm); ///:1 parm = new OracleParameter("ID_Pruefstand", OracleDbType.Int32); parm.Value = 18000 + b.TestBenchId; cmd.Parameters.Add(parm); ///:2 parm = new OracleParameter("ID_WzPruefreihe", OracleDbType.Int32); parm.Value = b.BatchNr; cmd.Parameters.Add(parm); ///:3 parm = new OracleParameter("ID_WZTyp", OracleDbType.Int32); parm.Value = b.WaterMeters[0].WaterMeterData.WMTypeId; cmd.Parameters.Add(parm); ///:4 parm = new OracleParameter("Rev_WZTyp", OracleDbType.Int32); parm.Value = b.WaterMeters[0].WaterMeterData.WMTypeRev; cmd.Parameters.Add(parm); ///:5 parm = new OracleParameter("Rev_Pruefstand_WZTyp", OracleDbType.Int32); parm.Value = 1; cmd.Parameters.Add(parm); ///:6 parm = new OracleParameter("StartDatumZeit", OracleDbType.TimeStamp); parm.Value = b.StartTime; cmd.Parameters.Add(parm); ///:7 parm = new OracleParameter("EndDatumZeit", OracleDbType.TimeStamp); parm.Value = b.EndTime; cmd.Parameters.Add(parm); ///:8 parm = new OracleParameter("Betriebsart", OracleDbType.Varchar2); parm.Value = ""; cmd.Parameters.Add(parm); ///:9 parm = new OracleParameter("QVzKontakt", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:10 parm = new OracleParameter("FuellenBegDruck", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:11 parm = new OracleParameter("DruckEvakVorne", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:12 parm = new OracleParameter("DruckEvakHinten", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:13 parm = new OracleParameter("DruckBeiAbpressen", OracleDbType.Double); parm.Value = 0;/*TODO*/ cmd.Parameters.Add(parm); ///:14 parm = new OracleParameter("Druckentwaessern", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:15 parm = new OracleParameter("SpuelDurchflussIst", OracleDbType.Double); parm.Value = 0;/*TODO*/ cmd.Parameters.Add(parm); ///:16 parm = new OracleParameter("ProgrammVersion", OracleDbType.Varchar2); parm.Value = "TBF v." + b.ProgramVersion; cmd.Parameters.Add(parm); ///:17 return cmd.ExecuteNonQuery(); /// Returns nr. of updated rows } void SaveOrUpdateWM(Results.Entities.WaterMeter wm, int max_Pruefindex, int hydr_Pruefung) { int sekundaere_Adr = wm.Passed ? 1 : 0; if (max_Pruefindex % 100 == 1) { OracleCommand cmd = new OracleCommand("INSERT INTO VT_ZAEHLER_PD(Auftragsnummer, VT_Identnummer, VT_Fernum, Max_Pruefindex, Zaehlernummer, Sekundaere_Adr, Hydr_Pruefung, ID_Benutzer, ANBID, Baujahr) VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10)", conn); OracleParameter parm; parm = new OracleParameter("Auftragsnummer", OracleDbType.Varchar2); parm.Value = wm.PurchaseOrder; cmd.Parameters.Add(parm); parm = new OracleParameter("VT_Identnummer", OracleDbType.Varchar2); parm.Value = "IPBATMXX"; cmd.Parameters.Add(parm); parm = new OracleParameter("VT_Fernum", OracleDbType.Varchar2); parm.Value = wm.SerialNr; cmd.Parameters.Add(parm); parm = new OracleParameter("Max_Pruefindex", OracleDbType.Int32); parm.Value = max_Pruefindex; cmd.Parameters.Add(parm); parm = new OracleParameter("Zaehlernummer", OracleDbType.Int32); parm.Value = -1; cmd.Parameters.Add(parm); parm = new OracleParameter("Sekundaere_Adr", OracleDbType.Int32); parm.Value = sekundaere_Adr; cmd.Parameters.Add(parm); parm = new OracleParameter("Hydr_Pruefung", OracleDbType.Int32); parm.Value = hydr_Pruefung; cmd.Parameters.Add(parm); parm = new OracleParameter("ID_Benutzer", OracleDbType.Int32); parm.Value = 6; cmd.Parameters.Add(parm); parm = new OracleParameter("ANBID", OracleDbType.Int32); parm.Value = Anbid_StaraTura; cmd.Parameters.Add(parm); parm = new OracleParameter("Baujahr", OracleDbType.Int32); parm.Value = dbCfg.Baujahr; cmd.Parameters.Add(parm); cmd.ExecuteNonQuery(); } else { OracleCommand cmd = new OracleCommand("UPDATE VT_ZAEHLER_PD SET Auftragsnummer = :1, VT_Identnummer = :2, Max_Pruefindex = :3, Hydr_Pruefung= :4, ID_Benutzer= :5, Baujahr= :6 WHERE VT_Fernum = :7 and ANBID = :8", conn); OracleParameter parm; parm = new OracleParameter("Auftragsnummer", OracleDbType.Varchar2); parm.Value = wm.PurchaseOrder; cmd.Parameters.Add(parm); parm = new OracleParameter("VT_Identnummer", OracleDbType.Varchar2); parm.Value = "IPBATMXX"; cmd.Parameters.Add(parm); parm = new OracleParameter("Max_Pruefindex", OracleDbType.Int32); parm.Value = max_Pruefindex; cmd.Parameters.Add(parm); parm = new OracleParameter("Hydr_Pruefung", OracleDbType.Int32); parm.Value = hydr_Pruefung; cmd.Parameters.Add(parm); parm = new OracleParameter("ID_Benutzer", OracleDbType.Int32); parm.Value = 6; cmd.Parameters.Add(parm); parm = new OracleParameter("Baujahr", OracleDbType.Int32); parm.Value = dbCfg.Baujahr; cmd.Parameters.Add(parm); parm = new OracleParameter("VT_Fernum", OracleDbType.Varchar2); parm.Value = wm.SerialNr; cmd.Parameters.Add(parm); parm = new OracleParameter("ANBID", OracleDbType.Int32); parm.Value = Anbid_StaraTura; cmd.Parameters.Add(parm); cmd.ExecuteNonQuery(); } { OracleCommand cmd = new OracleCommand("INSERT INTO VT_ZAEHLER_PINDEX_PD(" + "VT_Fernum, Pruefindex, ANBID, ID_Pruefstand, ID_WzPruefreihe, Hydr_Pruefung, " + "ReedKontakt, ReedKontaktOK, ReedKontaktZeit, KorrImprate, FestWertWZ, PtestOK, " + "Zaehlerstand, WT_Platz_NR, WZgut, ID_Benutzer, AnzahlPruefungen)" + " VALUES (:1, :2, :3, :4, :5, :6, 0, 0, 0, :7, 0, :8, 0, :9, :10, :11, :12)", conn); OracleParameter parm; parm = new OracleParameter("VT_Fernum", OracleDbType.Varchar2); parm.Value = wm.SerialNr; cmd.Parameters.Add(parm); parm = new OracleParameter("Pruefindex", OracleDbType.Int32); parm.Value = max_Pruefindex % 100; cmd.Parameters.Add(parm); parm = new OracleParameter("ANBID", OracleDbType.Int32); parm.Value = Anbid_StaraTura; cmd.Parameters.Add(parm); parm = new OracleParameter("ID_Pruefstand", OracleDbType.Int32); parm.Value = 18000 + wm.Batch.TestBenchId; cmd.Parameters.Add(parm); parm = new OracleParameter("ID_WzPruefreihe", OracleDbType.Int32); parm.Value = wm.Batch.BatchNr; cmd.Parameters.Add(parm); parm = new OracleParameter("Hydr_Pruefung", OracleDbType.Int32); parm.Value = hydr_Pruefung; cmd.Parameters.Add(parm); // ReedKontakt // ReedKontaktOK // ReedKontaktZeit parm = new OracleParameter("KorrImprate", OracleDbType.Double); parm.Value = wm.OrigCalibFactor; cmd.Parameters.Add(parm); // FestWertWZ parm = new OracleParameter("PtestOK", OracleDbType.Int32); parm.Value = 0;/*TODO*/ cmd.Parameters.Add(parm); // Zaehlerstand parm = new OracleParameter("WT_Platz_NR", OracleDbType.Int32); parm.Value = wm.WMPosition; cmd.Parameters.Add(parm); parm = new OracleParameter("WZgut", OracleDbType.Int32); parm.Value = wm.Passed ? 1 : 0; cmd.Parameters.Add(parm); parm = new OracleParameter("ID_Benutzer", OracleDbType.Int32); parm.Value = 6; cmd.Parameters.Add(parm); parm = new OracleParameter("AnzahlPruefungen", OracleDbType.Int32); parm.Value = 3; cmd.Parameters.Add(parm); cmd.ExecuteNonQuery(); } for (int q = 1; q <= 3; q++) { Results.Entities.MeterTestRslt mtr = wm.GetMeterTestRslt(string.Format("Q{0}", q)); SaveMeterTestResult(mtr, q, max_Pruefindex); } { OracleCommand cmd = new OracleCommand("INSERT INTO VT_IP_ZAEHLER_PINDEX_PD(" + "VT_Fernum, Pruefindex, ANBID, WITHCORRECTION2HZ, CORRECTION2HZ, DIFF2HZ8HZ, " + "WITHQ2CORRECTION, ERRQ2, Q2CORRECTIONFLOWRIGHT, Q2CORRECTIONLEFT, Q2CORRECTIONRIGHT)" + " VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11)", conn); OracleParameter parm; parm = new OracleParameter("VT_Fernum", OracleDbType.Varchar2); parm.Value = wm.SerialNr; cmd.Parameters.Add(parm); ///:1 parm = new OracleParameter("Pruefindex", OracleDbType.Int32); parm.Value = max_Pruefindex; cmd.Parameters.Add(parm); ///:2 parm = new OracleParameter("ANBID", OracleDbType.Int32); parm.Value = Anbid_StaraTura; cmd.Parameters.Add(parm); ///:3 parm = new OracleParameter("WITHCORRECTION2HZ", OracleDbType.Int32); parm.Value = 0; cmd.Parameters.Add(parm); ///:4 parm = new OracleParameter("CORRECTION2HZ", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:5 parm = new OracleParameter("DIFF2HZ8HZ", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:6 parm = new OracleParameter("WITHQ2CORRECTION", OracleDbType.Int32); parm.Value = wm.Q2CorrectionDone ? 1 : 0; cmd.Parameters.Add(parm); ///:7 parm = new OracleParameter("ERRQ2", OracleDbType.Double); parm.Value = wm.Q2ErrWOCorrection; cmd.Parameters.Add(parm); ///:8 parm = new OracleParameter("Q2CORRECTIONFLOWRIGHT", OracleDbType.Int32);parm.Value = wm.Q2CorrFlowRight;/*1=right to left*/ cmd.Parameters.Add(parm); ///:9 parm = new OracleParameter("Q2CORRECTIONLEFT", OracleDbType.Int32); parm.Value = (int)Math.Round(wm.Q2Correction); cmd.Parameters.Add(parm); ///:10 parm = new OracleParameter("Q2CORRECTIONRIGHT", OracleDbType.Int32); parm.Value = (int)Math.Round(wm.Q2Correction / 2); cmd.Parameters.Add(parm); ///:11 int rowsUpdated = cmd.ExecuteNonQuery(); } } /// /// Saves a water meter result of a single test /// /// q = 0, 1, 2 or 3 (Adj., Q1, Q2, Q3) /// Nr. of rows updated int SaveMeterTestResult(Results.Entities.MeterTestRslt mtr, int q, int max_Pruefindex) /// { double Q_wm = 3600.0 * mtr.VolumeMeter / mtr.TestTime; /// in [l/hour] int qq = (q == 0) ? -1 : ((q == 3 && dbCfg.DBUsed == DBUsed.Test) ? 5 : q); OracleCommand cmd = new OracleCommand("INSERT INTO VT_PRUEFREIHE_IST_PD(" + "VT_Fernum, Pruefindex, PruefungsNr, ANBID, ID_WZTyp, Rev_WZTyp, Rev_WZPruefpunkt, " + "Q_WZ, Q_Fehler, Q_Best, NIZ, AnfangZStand, EndZStand, " + "KorrErrQok, KorrErrQ, KorrQWz, TIZ, Vol_WZ_US, TempMittel_US)" + " VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, 0, 0, 0, :14, 0, 0)", conn); OracleParameter parm; parm = new OracleParameter("VT_Fernum", OracleDbType.Varchar2); parm.Value = mtr.WaterMeter.SerialNr; cmd.Parameters.Add(parm); ///:1 parm = new OracleParameter("Pruefindex", OracleDbType.Int32); parm.Value = max_Pruefindex % 100; cmd.Parameters.Add(parm); ///:2 parm = new OracleParameter("PruefungsNr", OracleDbType.Int32); parm.Value = qq; cmd.Parameters.Add(parm); ///:3 parm = new OracleParameter("ANBID", OracleDbType.Int32); parm.Value = Anbid_StaraTura; cmd.Parameters.Add(parm); ///:4 parm = new OracleParameter("ID_WZTyp", OracleDbType.Int32); parm.Value = mtr.WaterMeter.WaterMeterData.WMTypeId; cmd.Parameters.Add(parm); ///:5 parm = new OracleParameter("Rev_WZTyp", OracleDbType.Int32); parm.Value = mtr.WaterMeter.WaterMeterData.WMTypeRev; cmd.Parameters.Add(parm); ///:6 parm = new OracleParameter("Rev_WZPruefpunkt", OracleDbType.Int32); parm.Value = 1; cmd.Parameters.Add(parm); ///:7 parm = new OracleParameter("Q_WZ", OracleDbType.Double); parm.Value = Q_wm; cmd.Parameters.Add(parm); ///:8 parm = new OracleParameter("Q_Fehler", OracleDbType.Double); parm.Value = mtr.Error; cmd.Parameters.Add(parm); ///:9 parm = new OracleParameter("Q_Best", OracleDbType.Int32); parm.Value = mtr.Passed ? 1 : 0; cmd.Parameters.Add(parm); ///:10 parm = new OracleParameter("NIZ", OracleDbType.Int32); parm.Value = 0; cmd.Parameters.Add(parm); ///:11 parm = new OracleParameter("AnfangZStand", OracleDbType.Double); parm.Value = 0;/*TODO*/ cmd.Parameters.Add(parm); ///:12 parm = new OracleParameter("EndZStand", OracleDbType.Double); parm.Value = 0;/*TODO*/ cmd.Parameters.Add(parm); ///:13 /// KorrErrQok /// KorrErrQ /// KorrQWz parm = new OracleParameter("TIZ", OracleDbType.Double); parm.Value = mtr.TestTime; cmd.Parameters.Add(parm); /// Vol_WZ_US /// TempMittel_US return cmd.ExecuteNonQuery(); } #endif } }