public static void ValidaVersionConcurrencia <T>(T obj, IClienteBD cliente) where T : CLASE_BASE
        {
            String queryConsulta = "";
            //obteniendo el nombre de la tabla
            ANC_Tabla nombreTabla = obj.GetType().GetCustomAttribute <ANC_Tabla>(true);
            //buscando el campo ultima_act
            PropertyInfo pi = typeof(T).GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public).ToList().Where(y => y.GetCustomAttribute <ANP_CampoVersionamiento>() != null).FirstOrDefault();

            if (pi != null)
            {
                //significa que la tabla cuenta con campo de versionado
                ANP_CampoVersionamiento cv = pi.GetCustomAttribute <ANP_CampoVersionamiento>();
                String condicionBusqueda   = Estructura.ObtenCondicionBusquedaWhere <T>(obj);
                queryConsulta = "SELECT " + pi.Name + " FROM " + nombreTabla.Nombre + " WHERE " + condicionBusqueda;

                DataTable dt = cliente.EjecutarSelect(queryConsulta);

                if (dt.Rows.Count > 0)
                {
                    Int64 valorBDVersion = Convert.ToInt64(dt.Rows[0][0]);

                    Int64 valorActualVersion = Convert.ToInt64(pi.GetValue(obj));

                    if (valorBDVersion >= valorActualVersion)
                    {
                        throw new EX_ErrorConcurrencia(obj, "El registro fue actualizado desde otra ubicación.", pi.Name, valorActualVersion, valorBDVersion);
                    }
                }
            }
        }
 public void ZMX_AbrirConexion()
 {
     try
     {
         if (cliente == null)
         {
             if (clienteElegido == ClienteConfig.ClientesBD.Oracle)
             {
                 cliente = new ClienteBDOracle();
                 cliente.AsignarCadenaConexion(cadenaConexion);
             }
         }
         cliente.AbrirConexion();
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }