Mi aplicación no sirve para los demás, sólo local... (C#)

AlexMnrs Seguir

Beta
Verificación en dos pasos activada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
28 Oct 2013
Mensajes
66
(SOLUCIONADO) Mi aplicación no sirve para los demás, sólo local... (C#)

Buenas!

Estoy empezando con C# y he creado la siguiente aplicación (es la primera que hago):

2p4TUyB.png


Como podéis comprobar, es sencillita. Un DataGridView para almacenar los datos y algunos botones para añadir, editar, eliminar... que abren otros formularios donde debes de rellenar los datos y ejecutan las consultas correspondientes a la base de datos (INSERT INTO... en el caso de añadir, UPDATE en el caso de modificar, etc.)

El problema es -y no había caído antes- que la aplicación sólo funciona en local porque yo tengo el Microsoft SQL Server 2014 que es donde está la base de datos con la que trabaja, pero si la abro en una máquina virtual o se la paso al vecino para que la prueba, no funciona evidentemente porque en esos PCs no está el SQL Server con la base de datos... torpe yo!

He estado buscando y rebuscando tanto que hasta me ha empezado a doler el tarro, con eso os lo digo todo, y no he encontrado lo que busco. La pregunta es: cómo puedo hacer para que el programa funcione en cualquier ordenador? Es decir, que todos puedan abrirlo y meter ahí sus contactos. Que cierren el programa y al volver abrirlo sigan ahí. Vaya, como está funcionando ahora, pero sin bases de datos de por medio.

He estado mirando para guardar los datos en un XML y que al abrir el programa, es decir, en el evento load del formulario principal, automáticamente cargue el XML para que aparezcan los datos desde un principio sin tú tener que darle a un botoncito para cargar el archivo ni nada por el estilo, no sé si me explico... pero no me entero de nada sinceramente, entre que los vídeos que hay en YouTube son del año de la quica y están desactualizados y yo que soy novato, pues ya sabéis... :grumpy:

Por último me gustaría mencionar un programa llamado EMDB que es algo así como un catálogo de películas para tu tener ahí tu lista de las películas que has visto (o no), con su sinopsis, genero, duración, etc. y por lo visto guarda los datos en C:\Users\Usuario\Documents\EMDB. Hay un archivo cfg que imagino serán los parámetros de configuración de la aplicación y por otra parte hay un archivo .dat que es el que guarda las películas que tú añades en la aplicación. Eso es lo que yo quiero! Y he estado buscando para hacerlo, pero no encuentro nada sobre guardar datos en archivos .dat con c#...

No sé, a lo mejor alucináis en colores cuando hayáis leído todo esto y me estoy complicando demasiado, pero ya os digo que por más que busco e intento sacar una solución, no doy con ello.

A ver si podéis echarme un cable! :love_heart:
 
Última edición:

Carrega

Zeta
Verificación en dos pasos desactivada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
13 Ago 2008
Mensajes
1.881
Depende de la complejidad de de la base de datos que hayas diseñado y las relaciones entre tablas podrías optar como bien estas intentando por almacenar los datos en un archivo de texto plano.

Ahora respecto al tema de base de datos los usuarios no tendrán su propia base de datos por que primero deberían de tener instalado el gestor de base de datos, bien sea el sql server o mysql o cualquier otro.

Una de las opciones es integrar en el instalador del programa el del gestor de base de datos de manera que se lo instalas automáticamente al cliente y cargas ahí la base de datos.

Otra opción es usar una base de datos embebida. Estas base de datos no requieren de gestor de base de datos propiamente dicho ya que son muy livianas y van incluidas dentro del proprio programa y por tanto no tienes que instalarle nada al usuario. Un ejemplo de estas base de datos es apache derby.
 

AlexMnrs

Beta
Verificación en dos pasos activada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
28 Oct 2013
Mensajes
66
Depende de la complejidad de de la base de datos que hayas diseñado y las relaciones entre tablas podrías optar como bien estas intentando por almacenar los datos en un archivo de texto plano.

Ahora respecto al tema de base de datos los usuarios no tendrán su propia base de datos por que primero deberían de tener instalado el gestor de base de datos, bien sea el sql server o mysql o cualquier otro.

Una de las opciones es integrar en el instalador del programa el del gestor de base de datos de manera que se lo instalas automáticamente al cliente y cargas ahí la base de datos.

Otra opción es usar una base de datos embebida. Estas base de datos no requieren de gestor de base de datos propiamente dicho ya que son muy livianas y van incluidas dentro del proprio programa y por tanto no tienes que instalarle nada al usuario. Un ejemplo de estas base de datos es apache derby.

Qué respuesta tan rápida, muchas gracias!

Pues verás, la base de datos complejidad no tiene ninguna, es una tabla con nombre, apellido, movil, email y categoria, sin más...

Respecto a las alternativas que me has sugerido, me llama la atención la penúltima, una base de datos embebida en el propio programa. Pero no tengo ni idea de qué palabras clave debería de utilizar en Google para encontrar información al respecto que me ayude con eso.

Aunque esa opción es la más atractiva (o eso creo), para una aplicación tan sencilla como esta y otras parecidas que quiero hacer para seguir practicando, lo mejor sería almacenar los datos en un archivo de texto plano o XML, no?

Pero he mirado mil vídeos y artículos, y son tan antiguos, y cada uno lo hace de una forma diferente, que no me queda nada claro... [emoji26]

Enviado desde mi SM-G925F mediante Tapatalk
 
Última edición:

Carrega

Zeta
Verificación en dos pasos desactivada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
13 Ago 2008
Mensajes
1.881
Yo tampoco me metería a marearme con una base de datos para una app tan pequeña y mas si estas trasteando.

Sin duda lo de la base de datos embebida a mi también me parece la mejor opción. Yo hice una pequeña app a modo de catalogo de películas y la hice así, aunque la verdad me llevo bastantes horas de investigación para hacerla funcionar correctamente.

Para estas base de datos o bien puedes buscar base de datos embebidas que supongo habrá varios tipos o puedes mirarte directamente apache derbi que es la que yo utilice. Prácticamente apenas notaras diferencia respecto a como funciona sql (yo empece la app usando sql server y al final la cambie por una de apache derbi embebida).

Y no entiendo muy bien que problema tienes con el guardar/recuperar los datos desde un archivo. Si especificas un poco mas cual es tu duda o problema te podre ayudar.
 

AlexMnrs

Beta
Verificación en dos pasos activada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
28 Oct 2013
Mensajes
66
Yo tampoco me metería a marearme con una base de datos para una app tan pequeña y mas si estas trasteando.

Sin duda lo de la base de datos embebida a mi también me parece la mejor opción. Yo hice una pequeña app a modo de catalogo de películas y la hice así, aunque la verdad me llevo bastantes horas de investigación para hacerla funcionar correctamente.

Para estas base de datos o bien puedes buscar base de datos embebidas que supongo habrá varios tipos o puedes mirarte directamente apache derbi que es la que yo utilice. Prácticamente apenas notaras diferencia respecto a como funciona sql (yo empece la app usando sql server y al final la cambie por una de apache derbi embebida).

Y no entiendo muy bien que problema tienes con el guardar/recuperar los datos desde un archivo. Si especificas un poco mas cual es tu duda o problema te podre ayudar.

Perfecto! Mañana me pongo manos a la obra a buscar sobre bases de datos embebidas y apache derby, y a ver si consigo implementarlo en mi app sin estropearla porque me daría mucha pena, o volver a empezar.

Lo de guardar/recuperar datos de un archivo olvidalo, es porque estaba mirando de hacerlo con XML, pero me ha sido imposible. Mucho mejor las alternativas que tú me has dado! [emoji14]

Enviado desde mi SM-G925F mediante Tapatalk
 

Carrega

Zeta
Verificación en dos pasos desactivada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
13 Ago 2008
Mensajes
1.881
El guardar y recuperar datos de un archivo es bastante sencillo e imagino existen librerías que te parsean el xml, aunque a mi me gusta trabajar con .json, mas si esta orientado a objetos.

Echare un ojo a ver si encuentro entre mis favoritos algo de apache derbi que creo que vi algún tuto interesante en su momento.
 

MrMaster

Beta
Social Media
Verificación en dos pasos desactivada
Desde
14 Jun 2016
Mensajes
37
Si quieres abrir una base de datos en una versión menor no abrirá .. Ni a tiros procura usar una versión estándar como sql 2008 r2
 

zoom

Préstamo
Beta
Verificación en dos pasos desactivada
Desde
8 Jun 2016
Mensajes
129
Por favor, ten en cuenta 📝 que si deseas hacer un trato 🤝 con este usuario, está baneado 🔒.
Amigo evita tanto problema usando Microsoft Access, te sera mas cómodo y podrás incluirlo dentro de la carpeta de la aplicación.
 

AlexMnrs

Beta
Verificación en dos pasos activada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
28 Oct 2013
Mensajes
66
El guardar y recuperar datos de un archivo es bastante sencillo e imagino existen librerías que te parsean el xml, aunque a mi me gusta trabajar con .json, mas si esta orientado a objetos.

Echare un ojo a ver si encuentro entre mis favoritos algo de apache derbi que creo que vi algún tuto interesante en su momento.

Sería un detalle, me vendría genial! Acabo de ponerme en el ordenador y voy a ver que encuentro yo también. Espero que haya buena documentación :witless:

Si quieres abrir una base de datos en una versión menor no abrirá .. Ni a tiros procura usar una versión estándar como sql 2008 r2

Yo tengo la 2014, no sirve?

Amigo evita tanto problema usando Microsoft Access, te sera mas cómodo y podrás incluirlo dentro de la carpeta de la aplicación.

Pero aunque el usuario que ejecuta la aplicación no tenga Access instalado, podrá hacerla funcionar? No quiero tener que obligar a la gente a instalarse Access para utilizar una aplicación tan sencilla como la mía :ambivalence:
 

AlexMnrs

Beta
Verificación en dos pasos activada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
28 Oct 2013
Mensajes
66
He estado haciendo unas búsquedas y por lo que veo utilizan mucho SQLite como base de datos embebida para trabajar en visual.

https://visualstudiogallery.msdn.microsoft.com/0e313dfd-be80-4afb-b5e9-6e74d369f7a1

Mírate SQLite que seguramente encontraras mas documentación y te sera mas fácil de implementar.

Muchas gracias!

Ahora mismo me encuentro intentando hacerlo con Access, pero me da problemas en esta línea:

Insertar CODE, HTML o PHP:
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.15.0;Data Source=Contactos.mdb;Persist Security Info=False;";

El error es: "El proveedor 'Microsoft.ACE.OLEDB.15.0' no está registrado en el equipo local.

¿Tenéis idea de cómo solucionarlo? Imagino que tendré que descargarlo, pero no lo encuentro. Estoy usando Access 2016.

De todas formas, voy a echarle un ojo a eso que me has pasado de SQLite y a ver si tengo más suerte...
 

Carrega

Zeta
Verificación en dos pasos desactivada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
13 Ago 2008
Mensajes
1.881
Con access nunca he trabajado así que no tengo ni la mas remota idea, aunque sinceramente, diría que es un atraso seguir usando access a día de hoy, que de seguro hay mejores soluciones.

Aunque eso es como todo, todavía veo empresas a día de hoy trabajando con excel como si fuera una base de datos así que imagínate...

Con SQLite se trabaja mucho en app android y esta bastante extendido, pero no se a nivel de .NET que tan usado es, pues hace 2 años que no toco nada de .NET

Con una búsqueda rápida en youtube he visto varios tutos usando sqlite en C#, asi que no creo que tengas muchos problemas.
 

AlexMnrs

Beta
Verificación en dos pasos activada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
28 Oct 2013
Mensajes
66
Con access nunca he trabajado así que no tengo ni la mas remota idea, aunque sinceramente, diría que es un atraso seguir usando access a día de hoy, que de seguro hay mejores soluciones.

Aunque eso es como todo, todavía veo empresas a día de hoy trabajando con excel como si fuera una base de datos así que imagínate...

Con SQLite se trabaja mucho en app android y esta bastante extendido, pero no se a nivel de .NET que tan usado es, pues hace 2 años que no toco nada de .NET

Con una búsqueda rápida en youtube he visto varios tutos usando sqlite en C#, asi que no creo que tengas muchos problemas.

Voy a por ello entonces!

Imagino que no será mucho más complicado que usar una bd local con SQL Server, o eso espero jeje. Voy a echarle un vistazo y a ver que veo, y si lo consigo, publico respuesta para ponerte al día :encouragement:

Muchas gracias por toda la ayuda que me estás prestando, de lo contrario seguiría rompiéndome la cabeza como hice ayer durante horas :p8:
 

Carrega

Zeta
Verificación en dos pasos desactivada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
13 Ago 2008
Mensajes
1.881
Supongo que no sera mucho mas complejo que cargar la librería de la base de datos, configurar la cadena de conexión y a correr.

Ya me contaras que tal o si te surge alguna duda, y nada, estamos para ayudar :encouragement:
 

zoom

Préstamo
Beta
Verificación en dos pasos desactivada
Desde
8 Jun 2016
Mensajes
129
Por favor, ten en cuenta 📝 que si deseas hacer un trato 🤝 con este usuario, está baneado 🔒.
Sobre Access no lo recuerdo pero si es mejor que uses sqlite para la DB embedida
 

AlexMnrs

Beta
Verificación en dos pasos activada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
28 Oct 2013
Mensajes
66
A ver si podéis echarme una mano porque llevo toda la mañana liado con esto y no consigo que funcione.

Este es mi código:

Insertar CODE, HTML o PHP:
using System;
using System.Data;
using System.Windows.Forms;
using Finisar.SQLite;

namespace SQLiteTest
{
    public partial class Form1 : Form
    {
        string mDbPath = Application.StartupPath + "/Contactos.db";

        SQLiteConnection con;
        SQLiteCommand cmd;
        SQLiteDataAdapter da;
        DataTable dt;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            con = new SQLiteConnection("Data Source=" + mDbPath + "; Version = 3; New = True; Compress = True;");
            con.Open();

            using (SQLiteCommand cmd = new SQLiteCommand(@"CREATE TABLE IF NOT EXISTS 
            Contactos (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
            'nombre' VARCHAR(50), 'apellido' VARCHAR(50), 'movil' VARCHAR(50), 'email' VARCHAR(50), 'categoria' VARCHAR(50);", con))
            {
                cmd.ExecuteNonQuery();
                MessageBox.Show("Tabla creada.");
            }
        }

        private void CargarDatos()
        {
            try
            {
                dt = new DataTable();

                string cadena = "SELECT * FROM Contactos;";

                cmd = new SQLiteCommand(cadena, con);

                da = new SQLiteDataAdapter(cmd);
                da.Fill(dt);

                // Disabling counter field for edition because it can throw exception
                if (dt.Columns.Contains("id"))
                {
                    dt.Columns["id"].ReadOnly = true;
                }

                //dgvDatos.DataSource = dt;
                dataGridView1.Rows.Clear();
                foreach (DataRow item in dt.Rows)
                {
                    int n = dataGridView1.Rows.Add();
                    dataGridView1.Rows[n].Cells[0].Value = item[0].ToString();
                    dataGridView1.Rows[n].Cells[1].Value = item[1].ToString();
                    dataGridView1.Rows[n].Cells[2].Value = item[2].ToString();
                    dataGridView1.Rows[n].Cells[3].Value = item[3].ToString();
                    dataGridView1.Rows[n].Cells[4].Value = item[4].ToString();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message.ToString());
            }
        }

        private void btnCargar_Click(object sender, EventArgs e)
        {
            CargarDatos();
        }

    }
}

Conectar a la BD conecta porque lo he comprobado, lo que no hace es crear la tabla y no sé por qué, seguramente tendré algún fallo en el códgo pero no consigo verlo.

Lo que quiero es que al abrir el programa, si no existe la tabla Contactos, entonces la crea, de forma que sólo lo haga la primera vez que la persona ejecuta mi programa, de lo contrario ya no tiene que volver a crearla porque ya existe.

Después de eso, lo único que estoy intentando hacer es un botón que pase los datos a un DataGridView, pero cómo no consigo crear la tabla, todavía no sé si eso funcionará o no hasta que pueda comprobarlo.
 
Última edición:

Carrega

Zeta
Verificación en dos pasos desactivada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
13 Ago 2008
Mensajes
1.881
Ahora mismo estoy desde el móvil y no puedo mirarlo, pero en vez de usar IF NOT EXiST prueba hacerlo mediante un if normal haciendo una consulta para ver si existe, que puede que no lo este cogiendo bien.

Te da algún fallo? O simplemente no hace nada?

- - - Actualizado - - -

Ahora mismo estoy desde el móvil y no puedo mirarlo, pero prueba a comprobar si existe la base de datos mediante una consulta en un if normal, que puede que no te esté cogiendo el IF NOT EXIST.

Te d algún fallo? O solo no hace nada?
 

AlexMnrs

Beta
Verificación en dos pasos activada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
28 Oct 2013
Mensajes
66
Ahora mismo estoy desde el móvil y no puedo mirarlo, pero en vez de usar IF NOT EXiST prueba hacerlo mediante un if normal haciendo una consulta para ver si existe, que puede que no lo este cogiendo bien.

Te da algún fallo? O simplemente no hace nada?

- - - Actualizado - - -

Ahora mismo estoy desde el móvil y no puedo mirarlo, pero prueba a comprobar si existe la base de datos mediante una consulta en un if normal, que puede que no te esté cogiendo el IF NOT EXIST.

Te d algún fallo? O solo no hace nada?

No sé exactamente como hacer eso del if normal la verdad... veré qué puedo hacer.

Respecto a si me da algún fallo, la respuesta es sí. La aplicación se ejecuta normalmente, con lo cual significa que conecta a la BD sin problemas, además de que he puesto antes un MessageBox dentro del using para salir de dudas, pero cuando presiono el botón para cargar los datos:

XPaD3ls.png


Y gracias a ese error se sabe que el problema es que no está creando la tabla. Porque además abro la base de datos con SQLite Manager de Mozilla Firefox para asegurarme de que así es y, efectivamente, la tabla no existe.
 

Carrega

Zeta
Verificación en dos pasos desactivada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
13 Ago 2008
Mensajes
1.881
Te pego un código que he visto en stackoverflow:

using(SQLiteConnection con =newSQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;"))using(SQLiteCommand command = con.CreateCommand())
{
con
.Open();
command
.CommandText="SELECT name FROM sqlite_master WHERE name='account'";
var name = command.ExecuteScalar();

// check account table exist or not
// if exist do nothing
if(name !=null&& name.ToString()=="account")
return;
// acount table not exist, create table and insert
command
.CommandText="CREATE TABLE account (rowID INT, user VARCHAR(20), pass VARCHAR(20))";
command
.ExecuteNonQuery();
command
.CommandText="INSERT INTO account (rowID, user, pass) VALUES (0, '', '')";
command
.ExecuteNonQuery();
}

Como ves, ahi lo que hace es primero consultar a sqlite_master que es donde esta el nombre de todas las tablas de la base de datos, si hay una con el nombre de la que quieres probar.

Luego analiza ese resultado, de que si es distinto de null (existe alguna tabla) y se llama como la que buscas (teóricamente con el where de la consulta te garantiza que si te da un resultado sera ese así que no entiendo por que vuelve a comprobar eso ahí pero bueno), hace un return para cortar la ejecución ya que la tabla existirá.

En caso de que no entrara por ese if, ejecutaría las sentencias de creación de tabla y de inserción de un valor.

Prueba hacerlo así, y mete el mensaje box al final para confirmar que se ha creado.

Fuera parte de eso, te recomendaría que los nombres de las tablas sean todos en minúsculas, te evitara dolores de cabeza
 

AlexMnrs

Beta
Verificación en dos pasos activada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
28 Oct 2013
Mensajes
66
Te pego un código que he visto en stackoverflow:



Como ves, ahi lo que hace es primero consultar a sqlite_master que es donde esta el nombre de todas las tablas de la base de datos, si hay una con el nombre de la que quieres probar.

Luego analiza ese resultado, de que si es distinto de null (existe alguna tabla) y se llama como la que buscas (teóricamente con el where de la consulta te garantiza que si te da un resultado sera ese así que no entiendo por que vuelve a comprobar eso ahí pero bueno), hace un return para cortar la ejecución ya que la tabla existirá.

En caso de que no entrara por ese if, ejecutaría las sentencias de creación de tabla y de inserción de un valor.

Prueba hacerlo así, y mete el mensaje box al final para confirmar que se ha creado.

Fuera parte de eso, te recomendaría que los nombres de las tablas sean todos en minúsculas, te evitara dolores de cabeza

Nada tío, parece que no funciona. He dejado así el código del Form1_Load:

PHP:
        private void Form1_Load(object sender, EventArgs e)
        {

            using (SQLiteConnection conex = new SQLiteConnection("Data Source=" + mDbPath + ";Version = 3; New = True; Compress = True;"))
            using (SQLiteCommand command = conex.CreateCommand())
            {
                conex.Open();
                command.CommandText = "SELECT name FROM sqlite_master WHERE name='contactos'";
                var name = command.ExecuteScalar();

                // check account tale exist or not
                //if exist do nothing

                if (name != null && name.ToString() == "contactos")
                {
                    MessageBox.Show("La tabla contactos existe.");
                    return;
                }

                // account table not exist, create table and insert
                command.CommandText = "CREATE TABLE IF NOT EXISTS contactos(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, nombre VARCHAR(50) NOT NULL, apellido VARCHAR(50), movil VARCHAR(50) NOT NULL, email VARCHAR(50), categoria VARCHAR(50))";
                command.ExecuteNonQuery();
                command.CommandText = "INSERT INTO contactos (id, nombre, apellido, movil, email, categoria) VALUES (0, 'alex', 'rodriguez', 66666666, 'test@gmail.com', 'PERSONAL')";
                command.ExecuteNonQuery();
                MessageBox.Show("La tabla contactos ha sido creada.");
            }

            //con = new SQLiteConnection("Data Source=" + mDbPath + ";Version = 3; New = True; Compress = True;");
            //con.Open();

            //using (SQLiteCommand cmd = new SQLiteCommand(@"CREATE TABLE IF NOT EXISTS 
            //contactos (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
            //nombre VARCHAR(50) NOT NULL, apellido VARCHAR(50), movil VARCHAR(50) NOT NULL, email VARCHAR(50), categoria VARCHAR(50))", con))
            //{
            //    cmd.ExecuteNonQuery();
            //    MessageBox.Show("Tabla creada.");
            //}
        }

Y se supone que al cargar el formulario debería de saltar algún MessageBox, ya sea el de que la tabla no existe o el de que se ha creado, pero no hace absolutamente nada...

Lo que no entiendo son los using, se pueden poner como ahí? Me refiero sin abrir llaves en el primero y luego debajo el otro. Lo veo un poco extraño, pero claro, soy novato, lo mismo sí es válido, no lo sé...

Acabo de probar a meter el segundo using dentro del primero, pero no hay ninguna diferencia, sigue sin hacer nada la aplicación. Es decir, se ejecuta, pero ni MessageBox ni nada de nada.
 
Última edición:

¡Regístrate y comienza a ganar!

Beneficios

  • Gana dinero por participar
  • Gana dinero por recomendarnos
  • Descubre ofertas de empleo diariamente
  • Negocios seguros
  • ¡Información premium y más!

Acceder

¿Ya tienes una cuenta? Accede aquí

Arriba