none
Insertar registro en una base de datos SQLite desde una aplicacion metro (Modern UI) RRS feed

  • Pregunta

  • Muy buenas a ver intento insertar un registro o tupla o fila pero claro no es de una forma normal, de forma normal funciona pero claro intento usar índices, porque además el índice es el que dice esta transacción la ha realizado tal usuario que se logueado en el programa y estará asociada con el, pero bueno estoy teniendo muchos problemas para llegar a realizar esta tarea me da un error en la fila y me lleva hasta el método de executenonquery de sqlcommand estas son las líneas que he escrito en mi programa para realizarlo y no lo hace con éxito

    http://pastebin.com/sXz4VUUX

    ahí están las líneas que he puesto me da el error al insertar una fila saludos.

    viernes, 19 de octubre de 2012 23:13

Respuestas

  • Hola..

    Primero que todo aviso que nunca he usado SQLLite, pero.. ¿el problema no será que no estás recibiendo el ID del select que haces primero?

    En tu código tienes:
    var consulta = db.ExecuteAsync("SELECT IDCuenta FROM Cuentas WHERE (Nombre = '" + Usuario + "');");
    int id = consulta.Id;

    Aquí el ExecuteAsync es asíncrono como bien lo indica el nombre, pero tu no esperas a que se concluya la ejecución para recuperar el resultado. Si incluyes un await a tu select debería funcionar.

    var consulta = await db.ExecuteAsync("SELECT IDCuenta FROM Cuentas WHERE (Nombre = '" + Usuario + "');");
    int id = consulta.Id;

    De cualquier forma, si solo necesitas el ID, no sería mejor utilizar un ExecuteScalar? Mira este post de Josue, http://geeks.ms/blogs/jyeray/archive/2012/07/04/windows-8-bases-de-datos-locales-en-aplicaciones-metro-i.aspx

    El hace esto:

    int NumCustomers = await db.ExecuteScalarAsync<int>("SELECT COUNT(Id) FROM Customer");

    Salu2


    MCTS ADO.NET, MCTS WCF, MCTS WinForm, MCTS ASP.NET, MCPD Enterprise.

    Mi perfil: My geeks
    Colaborador: www.secondnug.com

    martes, 23 de octubre de 2012 19:13

Todas las respuestas

  • Hola!

    ¿Qué error te da exactamente?

    Un saludo!


    MCTS - .NET 4.0 Windows Applications
    MCTS - .NET 4.0 Data Access
    MCTS - .NET 4.0 Service Communication Applications
    MCPD - .NET 4.0 Windows Developer
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter

    sábado, 20 de octubre de 2012 6:11
    Moderador
  • Muy buenas te pongo captura de pantalla me da justo ese error justo después del insert y si te das cuenta la consulta lo que saca ers el ID del usuario con el que el usuario se loguea en la aplicación y ya puede añadir transacciones y esas transacciones el fallo que me da es al añadir

    mi clase con la que se ha creado la tabla transacciones

    namespace MoneyManage.Entidades
    {
        public class Transacciones
        {
            [SQLite.PrimaryKey, SQLite.AutoIncrement]
            public int IDTransaccion { get; set; }

            [SQLite.MaxLength(256)]
            public string Nombre { get; set; }

            //Amount es cantidad
            [SQLite.MaxLength(256)]
            public string Amount { get; set; }
            [SQLite.MaxLength(2000)]
            public string descripcion { get; set; }

            [SQLite.MaxLength(10)]
            public string tipo { get; set; }
            public bool cleared { get; set; }
            public string date { get; set; }
            //foreign key IDCuenta
            [SQLite.Indexed]
            public int IDCuenta { get; set; }
        }

    }

    si te das cuenta IDCuenta es indexed y es el campo de la base de datos que esta dando por saco al intentar hacer el insert.

    sábado, 20 de octubre de 2012 13:35
  • Hola..

    Primero que todo aviso que nunca he usado SQLLite, pero.. ¿el problema no será que no estás recibiendo el ID del select que haces primero?

    En tu código tienes:
    var consulta = db.ExecuteAsync("SELECT IDCuenta FROM Cuentas WHERE (Nombre = '" + Usuario + "');");
    int id = consulta.Id;

    Aquí el ExecuteAsync es asíncrono como bien lo indica el nombre, pero tu no esperas a que se concluya la ejecución para recuperar el resultado. Si incluyes un await a tu select debería funcionar.

    var consulta = await db.ExecuteAsync("SELECT IDCuenta FROM Cuentas WHERE (Nombre = '" + Usuario + "');");
    int id = consulta.Id;

    De cualquier forma, si solo necesitas el ID, no sería mejor utilizar un ExecuteScalar? Mira este post de Josue, http://geeks.ms/blogs/jyeray/archive/2012/07/04/windows-8-bases-de-datos-locales-en-aplicaciones-metro-i.aspx

    El hace esto:

    int NumCustomers = await db.ExecuteScalarAsync<int>("SELECT COUNT(Id) FROM Customer");

    Salu2


    MCTS ADO.NET, MCTS WCF, MCTS WinForm, MCTS ASP.NET, MCPD Enterprise.

    Mi perfil: My geeks
    Colaborador: www.secondnug.com

    martes, 23 de octubre de 2012 19:13
  • El problema lo solucione de otra forma, muchas gracias.

    miércoles, 24 de octubre de 2012 13:43
  • Hola

    podrías indicar como lo has solucionado para que cualquier otro cuente con la solución?

    Muchas gracias.


    MCTS - .NET 4.0 Windows Applications
    MCTS - .NET 4.0 Data Access
    MCTS - .NET 4.0 Service Communication Applications
    MCPD - .NET 4.0 Windows Developer
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter

    miércoles, 24 de octubre de 2012 13:49
    Moderador