bool GenericReadRecord(string xCaller, int iODBCID, string ySQL, string xTABLE,
                               string xWHERE, string[] RecordReturn, bool bUserNotification)
        {
            bool RC = true;

            RSLib_String.MyStringArrayEmpty(RecordReturn);
            string xSQL = ySQL;

            if (ySQL.Length == 0)
            {
                xSQL = "SELECT * FROM " + xTABLE;
                if (xWHERE.Length > 0)
                {
                    xSQL += " WHERE " + xWHERE;
                }
            }
            if (iODBCID != -1)
            {
                UseODBCString(iODBCID);
            }
            else
            {
                RSLib_ODBC.IsxStrConnect = false;   // Force Use the Deafult
            }
            if (!RSLib_ODBC.ReadSQL(xSQL, bUserNotification))
            {
                if (bUserNotification)
                {
                    RSLib_CriticalError.NonCriticalErrorHandler(xCaller,
                                                                "Err-xxx", "No Record found for Table: " + xTABLE + " WHERE " + xWHERE,
                                                                "Registro no encontrado!\n\nTABLA: " + xTABLE + "\n\nDONDE: " +
                                                                xWHERE + "\n\nFavor de verificar la Bitácora!",
                                                                "Error de lectura", xSQL);
                }
                RC = false;
            }
            else
            {
                RSLib_String.MyStringArrayCopy(RSLib_ODBC.GlobalReturnValue, RecordReturn, RSLib_ODBC.nGlobalReturnValue);
            }
            return(RC);
        }
        private void ShowLastUpdateValue()
        {
            dLastUSDValue = 0;
            // Load latest USD Exchange Rate
            string xSQL = "declare @xMaxFecha Date=(select MAX(FECHA) Fecha from FORTALEZA_PRD.dbo.CF_VALOR_DOLAR); \n" +
                          "select @xMaxFecha dMaxFecha, VALOR fUSD from FORTALEZA_PRD.dbo.CF_VALOR_DOLAR where FECHA=@xMaxFecha; \n";

            if (RSLib_ODBC.ReadSQL(xSQL, false))
            {
                if (!DateTime.TryParse(RSLib_ODBC.GlobalReturnValue[0], out xLastUpdate))
                {
                    xLastUpdate = new DateTime(2012, 1, 1);
                }
                dLastUSDValue         = RSLib_String.AToF(RSLib_ODBC.GlobalReturnValue[1]);
                lblLastUpdate.Text    = "$" + dLastUSDValue.ToString("#,##0.0000") + "  al " + xLastUpdate.ToString("dd/MM/yyyy");
                lblLastUpdate.Visible = true;
            }
            else
            {
                RSLib_CriticalError.CriticalErrorHandler("Form Load on RS DOF ExchangeRate",
                                                         "Err-xxx", "Failure Reading last Update Rate",
                                                         "Falla leyendo el último Tipo de Cambio", "RS DOF ExhangeRate", xSQL);
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            setNow();
            lblDate.Visible = true;
            RegistryRead();
            WhatIsMyIP = ReadIPAddress();
            if (WhatIsMyIP.Length == 0)
            {
                this.Close();
                return;
            }
            //WhatIsMyPublicIP = ReadPublicIPAddress(1);
            // DB Connection
            ODBCStringConn[(int)zConnID.RS_DB] = RSLib_ODBC.StrConnect;
            RSGbl_Variable.CheckedDB           = true;
            if (!RSLib_ODBC.RunLOG("Msg-000", "Start Application -> " + RSGbl_Variable.APPName + " Ver:" + RSGbl_Variable.APPVersion))
            {
                if (RSLib_ODBC.LastODBCError.IndexOf("No se encuentra el nombre del origen de datos y no se especificó ningún controlador predeterminado") != -1)
                {
                    // There is No ODBC Connector, lets create it.
                    if (RSLib_Registry.SetODBCForMSSQL(
                            RSLib_String.MyStringProvider(RSLib_ODBC.StrConnect, "DSN=", ";"),
                            RSServer,
                            RSLib_String.MyStringProvider(RSLib_ODBC.StrConnect, "UID=", ";")))
                    {
                        // Chack again if it worked
                        if (!RSLib_ODBC.RunLOG("Msg-000", "Start Application -> " + RSGbl_Variable.APPName + " Ver:" + RSGbl_Variable.APPVersion))
                        {
                            if (RSLib_ODBC.LastODBCError.IndexOf("No existe el servidor SQL Server o se ha denegado el acceso al mismo.") != -1)
                            {
                                DBDisconnected();
                                // UPS NO CONNECTION
                                MessageBox.Show("La Conexión con el Servidor SIMBANK no se pudo establecer!\n\nAsegure Conexión VPN y vuelva a intentar esta aplicación\n\n\nNo se puede continuar.",
                                                "Error de Conexión VPN", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                this.Close();
                                return;
                            }

                            DBDisconnected();
                            //ForceODBCConfig();
                            return;
                        }
                        // Continue... it is connected
                        MessageBox.Show("Conector ODBC creado con exito y conectado a la base de datos.\n\nLa aplicación se continuara ejecutando normalmente.", "Información");
                    }
                    else
                    {
                        DBDisconnected();
                        //ForceODBCConfig();
                        return;
                    }
                }
                if (RSLib_ODBC.LastODBCError.IndexOf("No existe el servidor SQL Server o se ha denegado el acceso al mismo.") != -1)
                {
                    DBDisconnected();
                    // UPS NO CONNECTION
                    MessageBox.Show("Conexión con el Servidor SIMBANK no se pudo establecer!\n\nAsegure Conexión VPN y vuelva a intentar esta aplicación\n\n\nNo se puede continuar.",
                                    "Error de Conexión VPN", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    this.Close();
                    return;
                }
            }
            this.Text = RSGbl_Variable.APPName + " Ver: " + RSGbl_Variable.APPVersion;
            if (!ReadGlobalParameters())
            {
                RSLib_CriticalError.CriticalErrorHandler(
                    "RSFaMFReport_Load", "Err-xxx",
                    "Fatal error, failure to read RSFaMFGlobalParameters",
                    "Thereie is an error reading Global Parameters",
                    "Error", "");
                ShutDown("No Global Parameters");
                return;
            }

            RSGbl_Variable.RootDirectory = RSGbl_Variable.DataPath + @"\Temp";

            ShowLastUpdateValue();

            timer1.Start();
        }
        private void UpdateFromDOF()
        {
            string      xProvider = "http://dof.gob.mx/indicadores.xml";
            WebRequest  SendReq   = HttpWebRequest.Create(xProvider);
            WebResponse GetRes    = SendReq.GetResponse();

            System.IO.Stream StreamRes  = GetRes.GetResponseStream();
            StreamReader     ResStrmRdr = new StreamReader(StreamRes, Encoding.UTF8);

            string xDOFOriginal = ResStrmRdr.ReadToEnd();

            StreamRes.Close();
            GetRes.Close();

            string xDOF = RSLib_String.MyStringProvider(xDOFOriginal, "<title>DOLAR</title>", "</item>");

            xDOF = xDOF.Replace("\n", "");
            xDOF = xDOF.Replace("\t", "");
            xDOF = xDOF.Replace(" ", "");
            string   xValue      = RSLib_String.MyStringProvider(xDOF, "<description>", "</description>");
            string   xDate       = RSLib_String.MyStringProvider(xDOF, "<valueDate>", "</valueDate>");
            double   fValue      = RSLib_String.AToF(xValue);
            DateTime xLocalClock = DateTime.Now;
            string   xSQL        = "";

            if (!DateTime.TryParse(xDate, out xLocalClock) || fValue == 0)
            {
                xLocalClock = DateTime.Now;
                xSQL        = "select distinct CONVERT(date,FECHA_FESTIVO) Festivo \n" +
                              "from FORTALEZA_PRD.dbo.CF_DIAS_FESTIVOS \n" +
                              "where FECHA_FESTIVO='" + xLocalClock.ToString(WhatIsDateFormat) + "' \n" +
                              "; \n";
                if (!RSLib_ODBC.ReadSQL(xSQL, false))
                {
                    if (xLocalClock.DayOfWeek == DayOfWeek.Saturday || xLocalClock.DayOfWeek == DayOfWeek.Sunday)
                    {
                        // IT is Saturday or Sunday - Nothing 2 save, then use the latest
                        fValue      = dLastUSDValue;
                        xLocalClock = DateTime.Now;
                    }
                    else
                    {
                        // No Es feriado: Ignore
                        RSLib_CriticalError.CriticalErrorHandler("Form UpdateFromDOF on RS DOF ExchangeRate",
                                                                 "Err-xxx", "Failure Getting Update Rate from DOF",
                                                                 "Falla leyendo el WebService", "RS DOF ExhangeRate", xDOFOriginal);
                        return;
                    }
                }
                else
                {
                    // IT is feriado - Nothing 2 save, then use the latest
                    fValue      = dLastUSDValue;
                    xLocalClock = DateTime.Now;
                }
            }
            xSQL = "insert into FORTALEZA_PRD.dbo.CF_VALOR_DOLAR (COD_EMPRESA,FECHA,VALOR) VALUES('00030','" + xLocalClock.ToString(WhatIsDateFormat) +
                   "','" + fValue.ToString() + "'); \n";
            if (!RSLib_ODBC.RunSQL(xSQL))
            {
                RSLib_CriticalError.CriticalErrorHandler("Form UpdateFromDOF on RS DOF ExchangeRate",
                                                         "Err-xxx", "Failure Updating Table",
                                                         "Falla actualizando tabla", "RS DOF ExhangeRate", xSQL);
            }
            else
            {
                // Show
                ShowLastUpdateValue();
                // Send eMail Notificaciones
                string xMessage =
                    "Fecha: \t" + xLocalClock.ToString(WhatIsDateFormat) + "\n" +
                    "Valor Tipo de Cambio: \t" + fValue.ToString("#,##0.0000") + "\n";

                RSLib_ODBC.RunLOG("PLD-001", "Exchange Rate Updated -> " + xMessage.Replace("\n", " ").Replace("\t", "-"));

                string xBody = RSFormaTable(xMessage, "Tipo de Cambio - Sistema PLD", true, true, false, true, true);

                if (!RSLib_SendMail.SendMailMessage(RSLib_SendMail.SMTP_From, "Oficial.Cumplimiento" + WhatIsDomain, "", "Help.Desk" + WhatIsDomain, "[Tipo de Cambio] " + xLocalClock.ToString(WhatIsDateFormat), xBody, true))
                {
                    RSLib_CriticalError.CriticalErrorHandler("Form UpdateFromDOF on RS DOF ExchangeRate",
                                                             "Err-xxx", "Failure sending email Notificacion",
                                                             "Falla enviando correo de notificacion", "RS DOF ExhangeRate", "");
                }
            }
        }