using System; using System.Collections.Generic; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using System.Globalization; using SafeMobileLib; using System.Threading; using System.IO; namespace ReportstoEmail { public partial class ReportsControl : UserControl { private SMdb_access smdbObj; private String glwhere,msgLimit,msgInteger,msgMustSel; private rep_type RepType; private ConvertDT convDT; private ArrayList vehicleListNames; private ArrayList ZoneListNames; private volatile Boolean ValidReport = false; private String minval = ""; private Boolean ButtonStatusCancel = false; public static volatile Hashtable IdReportHS = new Hashtable(); private void backDB_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; e.Result = ComputeDB(worker, e); } long ComputeDB(BackgroundWorker worker, DoWorkEventArgs e) { try { ValidReport = true; if ((RepType != rep_type.ENDOFDAY) && (RepType != rep_type.STOP) && (RepType != rep_type.IDLE) && (RepType != rep_type.FLEET)) { CheckValue(); switch (RepType) { case rep_type.LOG: smdbObj.get_log_view_all(glwhere); break; case rep_type.EMERG: smdbObj.get_EMERG(glwhere); break; case rep_type.HIST: IdReportHS.Clear(); smdbObj.get_History(glwhere, cbComputeAddress.Checked, ckSelectALL.Checked); if (cbComputeAddress.Checked) { GisAddressWorker.RunWorkerAsync(); retrynew = true; inwhile = false; int cntmax = 0; if (IdReportHS.Keys.Count > 0) { Int32 contNR = IdReportHS.Keys.Count; if (cntmax >= contNR) { retrynew = false; inwhile = false; } while (retrynew) { inwhile = true; Thread.Sleep(1000); SM.Debug("Wait 1 second to update"); cntmax++; if (cntmax > contNR) retrynew = false; } if (GisAddressWorker.IsBusy) GisAddressWorker.CancelAsync(); } try { foreach (StopData obj3 in MainForm1.HistDataReport) { if (IdReportHS[obj3.Location] != null) { obj3.Location = (String)IdReportHS[obj3.Location]; if (obj3.Location != "no address") smdbObj.Update_address_hist(obj3.Location, obj3.unique_id, obj3.Location); } } } catch (Exception ex) { SM.Debug("Exception on add address data in DB:" + ex.ToString()); } } break; case rep_type.ALLALARM: smdbObj.get_ALLAlarm(glwhere); break; case rep_type.GEOFENC: case rep_type.LAND: smdbObj.get_LANDANDZONE(glwhere, RepType); break; case rep_type.TELEMETRY_EVENT: case rep_type.TELEMETRY_ALARM: if (glwhere != "") glwhere = glwhere + " and "; else glwhere = " where "; if (RepType == rep_type.TELEMETRY_ALARM) glwhere = glwhere + " alarm =1 "; else glwhere = glwhere + " alarm =0 "; smdbObj.get_TelemHist_alarm_event(glwhere); foreach (SpeedData obj in MainForm1.SpeedingList) { Boolean updateDB = false; if ((obj.Address == "") || (obj.Address == " ")) { try { Int32 step = ((Vehicle)MainForm1.vehicleHT[(String)MainForm1.VehIDHash[obj.sc_id]]).gps_interval; if (step * 2 < 120) step = 120; else step = step * 2; //gethistory SMposition neartheTime = null; ArrayList tmp = smdbObj.get_HistoryTelem(obj.sc_id, obj.timeGMT - step, obj.timeGMT + step); if (tmp.Count > 0) { foreach (SMposition obj2 in tmp) { if (neartheTime == null) neartheTime = obj2; else if (Math.Abs(neartheTime.m_time - obj.timeGMT) > Math.Abs(obj2.m_time - obj.timeGMT)) neartheTime = obj2; } if ((neartheTime.m_address == "") || (neartheTime.m_address == " ")) { if (cbComputeAddress.Checked) { MainForm1.AddrCnt++; MainForm1.AddrGISQueue.Enqueue(new AddrAndID(MainForm1.AddrCnt, neartheTime.m_lat, neartheTime.m_lng)); MainForm1.IdReportHS.Add(MainForm1.AddrCnt.ToString(), "no address"); String Idtofind = MainForm1.AddrCnt.ToString(); Boolean retrynew = true; Int32 cntmax = 0; while (retrynew) { cntmax++; retrynew = false; if ((String)MainForm1.IdReportHS[Idtofind] == "no address") { System.Threading.Thread.Sleep(200); SM.Debug("wait 200msec for address"); retrynew = true; } else obj.Address = (String)MainForm1.IdReportHS[Idtofind]; if (cntmax > 10) retrynew = false; } } else obj.Address = ""; if ((obj.Address == "") || (obj.Address == " ")) obj.Address = "LAT:" + Math.Round(neartheTime.m_lat, 5).ToString() + " , LNG:" + Math.Round(neartheTime.m_lng, 5).ToString(); else updateDB = true; } else { obj.Address = neartheTime.m_address; updateDB = true; } } else obj.Address = "N/A"; //update datebase telemetry if (updateDB) smdbObj.Update_address_telem(obj.sc_id, obj.timeGMT, obj.Address.Replace(',', ' ')); } catch (Exception ex) { SM.Debug("Error on update telemetry address:" + ex.ToString()); } } } break; case rep_type.SPEED: smdbObj.get_Speeding(glwhere); foreach (SpeedData obj in MainForm1.SpeedingList) { Boolean updateDB = false; if (obj.Address == "no address") { try { Int32 step = ((Vehicle)MainForm1.vehicleHT[(String)MainForm1.VehIDHash[obj.sc_id]]).gps_interval; if (step * 2 < 120) step = 120; else step = step * 2; //gethistory SMposition neartheTime = null; ArrayList tmp = smdbObj.get_HistorySpeed(obj.sc_id, obj.timeGMT - step, obj.timeGMT + step, obj.timeGMT); if (tmp.Count > 0) { foreach (SMposition obj2 in tmp) { if (neartheTime == null) neartheTime = obj2; else if (Math.Abs(neartheTime.m_time - obj.timeGMT) > Math.Abs(obj2.m_time - obj.timeGMT)) neartheTime = obj2; } if ((neartheTime.m_address == "") || (neartheTime.m_address == " ")) { if (cbComputeAddress.Checked) { MainForm1.AddrCnt++; MainForm1.AddrGISQueue.Enqueue(new AddrAndID(MainForm1.AddrCnt, neartheTime.m_lat, neartheTime.m_lng)); MainForm1.IdReportHS.Add(MainForm1.AddrCnt.ToString(), "no address"); String Idtofind = MainForm1.AddrCnt.ToString(); Boolean retrynew = true; Int32 cntmax = 0; while (retrynew) { cntmax++; retrynew = false; if ((String)MainForm1.IdReportHS[Idtofind] == "no address") { System.Threading.Thread.Sleep(200); SM.Debug("Wait 200msec"); retrynew = true; } else obj.Address = (String)MainForm1.IdReportHS[Idtofind]; if (cntmax > 10) retrynew = false; } } else obj.Address = ""; if ((obj.Address == "") || (obj.Address == " ")) obj.Address = "LAT:" + Math.Round(neartheTime.m_lat, 5).ToString() + " , LNG:" + Math.Round(neartheTime.m_lng, 5).ToString(); else updateDB = true; } else { obj.Address = neartheTime.m_address; updateDB = true; } } else obj.Address = "N/A"; //update datebase Speed if (updateDB) smdbObj.Update_address_speed(obj.sc_id, obj.timeGMT, obj.Address.Replace(',', ' ')); } catch (Exception ex) { SM.Debug("Error on update telemetry address:" + ex.ToString()); } } } break; } } else { if (CheckLimit()) { if ((RepType == rep_type.ENDOFDAY) || (RepType == rep_type.STOP) || (RepType == rep_type.IDLE)) { //MainForm1.PositionList = smdbObj.get_position_for_report((Int32)(new ConvertDT().GetSecondsLocalFromDT(dtFrom.Value)) - dtFrom.Value.Hour * 3600 - dtFrom.Value.Minute * 60 - dtFrom.Value.Second, (Int32)(new ConvertDT().GetSecondsLocalFromDT(dtTo.Value)) - dtTo.Value.Hour * 3600 - dtTo.Value.Minute * 60 - dtTo.Value.Second + 86400, (((RadComboBoxItem)cbVehName.Items[cbVehName.SelectedIndex]).Value as VehandID).sc_id); MainForm1.PositionList = smdbObj.get_position_for_report((Int32)(new ConvertDT().GetSecondsLocalFromDT(dtFrom.Value)), (Int32)(new ConvertDT().GetSecondsLocalFromDT(dtTo.Value)), (((RadListDataItem)cbVehName.Items[cbVehName.SelectedIndex]).Value as VehandID).sc_id); MainForm1.NameReport = (((RadListDataItem)cbVehName.Items[cbVehName.SelectedIndex]).Value as VehandID).Name; } if (RepType == rep_type.FLEET) { foreach (FleetIdandPos obj in MainForm1.FleetPosList) { //obj.Position = smdbObj.get_position_for_report((Int32)(new ConvertDT().GetSecondsLocalFromDT(dtFrom.Value)) - dtFrom.Value.Hour * 3600 - dtFrom.Value.Minute * 60 - dtFrom.Value.Second, (Int32)(new ConvertDT().GetSecondsLocalFromDT(dtTo.Value)) - dtTo.Value.Hour * 3600 - dtTo.Value.Minute * 60 - dtTo.Value.Second + 86400, ((Vehicle)MainForm1.vehicleHT[obj.Name]).sc_id); obj.Position = smdbObj.get_position_for_report((Int32)(new ConvertDT().GetSecondsLocalFromDT(dtFrom.Value)), (Int32)(new ConvertDT().GetSecondsLocalFromDT(dtTo.Value)), ((Vehicle)MainForm1.vehicleHT[obj.Name]).sc_id); SM.Debug(obj.Name + " " + obj.Position.Count); } } } else { SM.Debug("Not valid Report"); ValidReport = false; } } } catch (Exception ex) { SM.Debug("Error compute date from DB:" + ex.ToString()); } return 1; } private void backDB_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { switch (RepType) { case rep_type.LOG: ONOFFReport tmp = new ONOFFReport(); tmp.timeCaptionTextBox.Value = MainForm1.returnLNGString("SMSMessTime"); switch (MainForm1.radioType) { case RADIOTYPE.CONECTPLUS: case RADIOTYPE.MOTO: tmp.titleTextBox.Value = MainForm1.returnLNGString("SMSlogradio"); break; case RADIOTYPE.HYT: tmp.titleTextBox.Value = MainForm1.returnLNGString("SMSlogradioHYT"); break; case RADIOTYPE.HARRIS: tmp.titleTextBox.Value = MainForm1.returnLNGString("SMSlogradioHARRIS"); break; case RADIOTYPE.ATLAS: tmp.titleTextBox.Value = MainForm1.returnLNGString("SMSlogradioAstro"); break; case RADIOTYPE.TETRA: tmp.titleTextBox.Value = MainForm1.returnLNGString("SMSlogradioTetra"); break; } tmp.statusCaptionTextBox.Value = MainForm1.returnLNGString("SMSStatus"); tmp.nameCaptionTextBox.Value = MainForm1.returnLNGString("htableVehiclesListColumns1"); reportViewer1.ReportSource = tmp; break; case rep_type.SPEED: lbwaitbar.Visible = false; prog.Visible = false; cbComputeAddress.Visible = true; SpeedingReport tmpSpeed = new SpeedingReport(); tmpSpeed.nameCaptionTextBox.Value = MainForm1.returnLNGString("htableVehiclesListColumns1"); if (MainForm1.isInMile) tmpSpeed.speedCaptionTextBox.Value = MainForm1.returnLNGString("tablevehiclesListColumns3") + " (" + MainForm1.milesh + ")"; else tmpSpeed.speedCaptionTextBox.Value = MainForm1.returnLNGString("tablevehiclesListColumns3") + " (" + MainForm1.kmh + ")"; tmpSpeed.timeCaptionTextBox.Value = MainForm1.returnLNGString("alarmsListColumns1"); tmpSpeed.titleTextBox.Value = MainForm1.returnLNGString("speedalarm"); tmpSpeed.dataCaptionTextBox.Value = MainForm1.returnLNGString("rapday"); tmpSpeed.addressCaptionTextBox.Value = MainForm1.returnLNGString("addrOrLatLng"); tmpSpeed.txObeserv.Value = MainForm1.returnLNGString("obsSpeed"); reportViewer1.ReportSource = tmpSpeed; break; case rep_type.TELEMETRY_EVENT: case rep_type.TELEMETRY_ALARM: lbwaitbar.Visible = false; prog.Visible = false; cbComputeAddress.Visible = true; SpeedingReport tmpTelem = new SpeedingReport(); tmpTelem.nameCaptionTextBox.Value = MainForm1.returnLNGString("htableVehiclesListColumns1"); tmpTelem.timeCaptionTextBox.Value = MainForm1.returnLNGString("alarmsListColumns1"); if (RepType == rep_type.TELEMETRY_ALARM) { tmpTelem.titleTextBox.Value = MainForm1.returnLNGString("telemreport"); tmpTelem.speedCaptionTextBox.Value = MainForm1.returnLNGString("alarmtype"); } else { tmpTelem.titleTextBox.Value = MainForm1.returnLNGString("telemevent"); tmpTelem.speedCaptionTextBox.Value = MainForm1.returnLNGString("eventype"); } tmpTelem.dataCaptionTextBox.Value = MainForm1.returnLNGString("rapday"); tmpTelem.addressCaptionTextBox.Value = MainForm1.returnLNGString("addrOrLatLng"); tmpTelem.txObeserv.Value = ""; reportViewer1.ReportSource = tmpTelem; break; case rep_type.GEOFENC: ZoneReport tmpZone = new ZoneReport(); tmpZone.landNameCaptionTextBox.Value = MainForm1.returnLNGString("zonename"); tmpZone.landTypeCaptionTextBox.Value = MainForm1.returnLNGString("alarmtype"); tmpZone.nameCaptionTextBox.Value = MainForm1.returnLNGString("htableVehiclesListColumns1"); tmpZone.timeCaptionTextBox.Value = MainForm1.returnLNGString("alarmsListColumns1"); tmpZone.titleTextBox.Value = MainForm1.returnLNGString("InZoneReport"); reportViewer1.ReportSource = tmpZone; break; case rep_type.LAND: ZoneReport tmpLand = new ZoneReport(); tmpLand.landNameCaptionTextBox.Value = MainForm1.returnLNGString("landmarkname"); tmpLand.landTypeCaptionTextBox.Value = MainForm1.returnLNGString("alarmtype"); tmpLand.nameCaptionTextBox.Value = MainForm1.returnLNGString("htableVehiclesListColumns1"); tmpLand.timeCaptionTextBox.Value = MainForm1.returnLNGString("alarmsListColumns1"); tmpLand.titleTextBox.Value = MainForm1.returnLNGString("landmarkrep"); reportViewer1.ReportSource = tmpLand; break; case rep_type.EMERG: ONOFFReport tmpEmerg = new ONOFFReport(); tmpEmerg.timeCaptionTextBox.Value = MainForm1.returnLNGString("alarmsListColumns1"); tmpEmerg.titleTextBox.Value = MainForm1.returnLNGString("emergAlarmRep"); tmpEmerg.statusCaptionTextBox.Value = MainForm1.returnLNGString("rapday"); tmpEmerg.nameCaptionTextBox.Value = MainForm1.returnLNGString("htableVehiclesListColumns1"); reportViewer1.ReportSource = tmpEmerg; break; case rep_type.HIST: MainForm1.IsHistroyNotStop = true; if (cbComputeAddress.Checked) { //btPrintReport.Enabled = true; lbwaitbar.Visible = false; prog.Visible = false; cbComputeAddress.Visible = true; } StopReport tmpRep2 = new StopReport(); //tmpRep2.titleTextBox.Value = MainForm1.returnLNGString("namesandvehicleHistory") + " " + cbVehName.Text; if (chVehName.Checked) tmpRep2.titleTextBox.Value = MainForm1.returnLNGString("HistoryRep") + " " + MainForm1.returnLNGString("forvehicle") + " " + cbVehName.Text; else tmpRep2.titleTextBox.Value = MainForm1.returnLNGString("HistoryRep"); tmpRep2.timeCaptionTextBox.Value = MainForm1.returnLNGString("label3"); tmpRep2.locationCaptionTextBox.Value = MainForm1.returnLNGString("addrOrLatLng"); if (MainForm1.isInMile) tmpRep2.durationCaptionTextBox.Value = MainForm1.returnLNGString("tablevehiclesListColumns3") + " (" + MainForm1.milesh + ")"; else tmpRep2.durationCaptionTextBox.Value = MainForm1.returnLNGString("tablevehiclesListColumns3") + " (" + MainForm1.kmh + ")"; tmpRep2.dataCaptionTextBox.Value = MainForm1.returnLNGString("dateSTOP"); reportViewer1.ReportSource = tmpRep2; /* Telerik.Reporting.Processing.ReportProcessor reportProcessor = new Telerik.Reporting.Processing.ReportProcessor(); Telerik.Reporting.InstanceReportSource instanceReportSource = new Telerik.Reporting.InstanceReportSource(); instanceReportSource.ReportDocument = (Telerik.Reporting.Report)tmpRep2; Telerik.Reporting.Processing.RenderingResult result = reportProcessor.RenderReport("PDF", instanceReportSource, null); using (FileStream fs = new FileStream("C:\\biguhist.pdf", FileMode.Create)) { fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length); }*/ break; case rep_type.ALLALARM: MainForm1.IsHistroyNotStop = true; StopReport tmpRep3 = new StopReport(); if (chVehName.Checked) tmpRep3.titleTextBox.Value = MainForm1.returnLNGString("allAlarmTitle") + " " + MainForm1.returnLNGString("forvehicle") + " " + cbVehName.Text; else tmpRep3.titleTextBox.Value = MainForm1.returnLNGString("allAlarmTitle"); tmpRep3.timeCaptionTextBox.Value = MainForm1.returnLNGString("alarmtype"); tmpRep3.locationCaptionTextBox.Value = MainForm1.returnLNGString("SMSMessTime"); tmpRep3.durationCaptionTextBox.Value = MainForm1.returnLNGString("lbDescript"); tmpRep3.dataCaptionTextBox.Value = MainForm1.returnLNGString("htableVehiclesListColumns1"); reportViewer1.ReportSource = tmpRep3; break; case rep_type.ENDOFDAY: if (ValidReport) { EndOfDay tmpEND = new EndOfDay(); tmpEND.distanceCaptionTextBox.Value = MainForm1.returnLNGString("namedistance"); tmpEND.startAddressCaptionTextBox.Value = MainForm1.returnLNGString("namestrlocTRAV"); tmpEND.stopAddressCaptionTextBox.Value = MainForm1.returnLNGString("namestoplocTRAV"); tmpEND.startTimeCaptionTextBox.Value = MainForm1.returnLNGString("namestrhourTRAV"); tmpEND.stopTimeCaptionTextBox.Value = MainForm1.returnLNGString("label3"); tmpEND.titleTextBox.Value = MainForm1.returnLNGString("nameandvehicleTRAV") + " " + cbVehName.Text; tmpEND.tripCaptionTextBox.Value = MainForm1.returnLNGString("nameroad"); reportViewer1.ReportSource = tmpEND; } break; case rep_type.STOP: if (ValidReport) { MainForm1.IsHistroyNotStop = false; MainForm1.IsIdle = false; StopReport tmpRep = new StopReport(); tmpRep.titleTextBox.Value = MainForm1.returnLNGString("namesandvehicleSTOP") + " " + cbVehName.Text; tmpRep.timeCaptionTextBox.Value = MainForm1.returnLNGString("label3"); tmpRep.locationCaptionTextBox.Value = MainForm1.returnLNGString("locationSTOP"); tmpRep.durationCaptionTextBox.Value = MainForm1.returnLNGString("waitingSTOP"); tmpRep.dataCaptionTextBox.Value = MainForm1.returnLNGString("dateSTOP"); reportViewer1.ReportSource = tmpRep; } break; case rep_type.IDLE: if (ValidReport) { MainForm1.IsHistroyNotStop = false; MainForm1.IsIdle = true; StopReport tmpIDLE = new StopReport(); tmpIDLE.titleTextBox.Value = MainForm1.returnLNGString("namesandvehicleSTOPENG") + " " + cbVehName.Text; tmpIDLE.timeCaptionTextBox.Value = MainForm1.returnLNGString("label3"); tmpIDLE.locationCaptionTextBox.Value = MainForm1.returnLNGString("locationSTOP"); tmpIDLE.durationCaptionTextBox.Value = MainForm1.returnLNGString("waitingSTOP"); tmpIDLE.dataCaptionTextBox.Value = MainForm1.returnLNGString("dateSTOP"); reportViewer1.ReportSource = tmpIDLE; } break; case rep_type.FLEET: if (ValidReport) { FleetReport tmpFleet = new FleetReport(); tmpFleet.distanceCaptionTextBox.Value = MainForm1.returnLNGString("namedistance"); tmpFleet.nameCaptionTextBox.Value = MainForm1.returnLNGString("htableVehiclesListColumns1"); tmpFleet.startCaptionTextBox.Value = MainForm1.returnLNGString("namefirst") + " " + MainForm1.returnLNGString("namerun"); tmpFleet.stopCaptionTextBox.Value = MainForm1.returnLNGString("namefirst") + " " + MainForm1.returnLNGString("namewait"); tmpFleet.titleTextBox.Value = MainForm1.returnLNGString("titleFLEET"); tmpFleet.tripsCaptionTextBox.Value = MainForm1.returnLNGString("nameroute"); reportViewer1.ReportSource = tmpFleet; } break; } //reportViewer1.RefreshReport(); ButtonStatusCancel = false; btPrintReport.Text = MainForm1.returnLNGString("btShowReport"); } public static volatile Queue AddrGISQueue = new Queue(); private volatile Boolean findaddress; private volatile AddrAndID tmpAddrAndID; private Double valHash; private volatile String AddrtmpX; private volatile GoogleAddr2 volltmpGo = new GoogleAddr2(); private volatile Boolean retrynew; private volatile Boolean inwhile = false; private void GisAddressWorker_DoWork(object sender, DoWorkEventArgs e) { try { BackgroundWorker worker = sender as BackgroundWorker; while (AddrGISQueue.Count > 0) { if ((worker.CancellationPending == true)) { e.Cancel = true; break; } tmpAddrAndID = (AddrAndID)AddrGISQueue.Dequeue(); findaddress = false; try { tmpAddrAndID.LNG = Math.Round(tmpAddrAndID.LNG, 4); tmpAddrAndID.LAT = Math.Round(tmpAddrAndID.LAT, 4); valHash = tmpAddrAndID.LNG + tmpAddrAndID.LAT * 0.000001; if (MainForm1.AddrHass[valHash] != null) { tmpAddrAndID.Address = (String)MainForm1.AddrHass[valHash]; findaddress = true; } else { AddrtmpX = smdbObj.get_address(tmpAddrAndID.LAT, tmpAddrAndID.LNG); if (AddrtmpX != "") { MainForm1.AddrHass.Add(valHash, AddrtmpX); tmpAddrAndID.Address = AddrtmpX; findaddress = true; } } } catch { } if (!findaddress) { tmpAddrAndID.Address = volltmpGo.getAddressLATLNG(tmpAddrAndID.LAT, tmpAddrAndID.LNG); } if ((tmpAddrAndID.Address != "") && (tmpAddrAndID.Address != " ")) { if (!findaddress) { try { if (tmpAddrAndID.Address != "N/A") { valHash = tmpAddrAndID.LNG + tmpAddrAndID.LAT * 0.000001; MainForm1.AddrHass.Add(valHash, tmpAddrAndID.Address); AddrtmpX = smdbObj.get_address(tmpAddrAndID.LAT, tmpAddrAndID.LNG); //just for avoid Error from Event Viewer if (AddrtmpX == "") smdbObj.Insert_Address(tmpAddrAndID.Address, tmpAddrAndID.LAT, tmpAddrAndID.LNG); } } catch (Exception ex) { SM.Debug("Error: " + ex.ToString()); } } IdReportHS[tmpAddrAndID.ID.ToString()] = tmpAddrAndID.Address; } else { //dau in open street maps si apoi ies prin prin cene Thread.Sleep(1100); tmpAddrAndID.Address = volltmpGo.getAddressLATLNG2(tmpAddrAndID.LAT, tmpAddrAndID.LNG); if ((tmpAddrAndID.Address != "") && (tmpAddrAndID.Address != " ")) { if (!findaddress) { try { if (tmpAddrAndID.Address != "N/A") { valHash = tmpAddrAndID.LNG + tmpAddrAndID.LAT * 0.000001; MainForm1.AddrHass.Add(valHash, tmpAddrAndID.Address); AddrtmpX = smdbObj.get_address(tmpAddrAndID.LAT, tmpAddrAndID.LNG); //just for avoid Error from Event Viewer if (AddrtmpX == "") smdbObj.Insert_Address(tmpAddrAndID.Address, tmpAddrAndID.LAT, tmpAddrAndID.LNG); } } catch (Exception ex) { SM.Debug("Error: " + ex.ToString()); } } IdReportHS[tmpAddrAndID.ID.ToString()] = tmpAddrAndID.Address; } } } } catch (Exception ex) { SM.Debug("Error retrive address:" + ex.ToString()); } Thread.Sleep(10); } } }