Conectar Bv.Net con Sqlite

Iniciado por proteus8, 13 Enero 2011, 01:30 AM

0 Miembros y 1 Visitante están viendo este tema.

proteus8

Hola a todos,
Estoy haciendo un proyecto en VB.NET para un Dispostivo Mobil ( Captor de Datos Datalogic Skorpio) que tiene como S.O Windows CE, tengo una base datos  SQLITE que se encuentra en el mismo captor, necesito saber cómo me puedo conectar con esta base de datos, la idea es poder hacer consultas a esta base, e buscado por todos lados pero no encuentro nada por favor me pueden ayudar, es urgente.


.::IT::.

Primero que nada necesitas http://sourceforge.net/projects/sqlite-dotnet2/ que es el conector nativo .net  despues pasate por aqui http://www.sgoliver.net/blog/?p=48 y con eso la haces suerte.

Saludos!!!!!!!!
Simplemente .::IT::.

[D4N93R]

IT recuerda que el compact framework es algo limitado, por lo que hay que revisar si esa lib anda bien. Obviamente es mucho mejor que darle odbc pero igual tiene la dos opciones. :) Además de que es algo que viene listo, en cambio ese proyecto no se sabe que tan estable sea o si está optimizado para mobile.

Un saludo y está bueno el proyectico ese!

proteus8

 [D4N93R], IT,
    Muchachos mil gracias por sus respuestas, el ejemplo que sale en uno de los link que me dajaron eta en C# asi que intente modificar el codigo para Vb pero me da el siguiente error:
"SQLite error
no such table: CMB_USUARIO
"

, mi codigo es este:
Código (vbnet) [Seleccionar]

Imports System
Imports System.Data
Imports System.Data.SQLite
Imports System.Data.SQLite.SQLiteConnection
Imports System.Data.SQLite.SQLiteCommand
Imports System.Data.SQLite.SQLiteTransaction
Imports System.Data.SQLite.SQLiteDataReader
Public Class Form1
    Public ruta As String
    Public consulta As String
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        If USUARIO.Text = "" Or PASSWORD.Text = "" Then
            MessageBox.Show("Debe Ingresar Usuario y Contraseña")
        Else
            Dim cnn As New SQLiteConnection("Data Source=CLAS_MOBILE.db;Version=3;")
            Dim Ada As New SQLiteDataAdapter()
            Dim Sqlstr As New SQLiteCommand("SELECT USU_USUARIO,USU_ZONA FROM CMB_USUARIO WHERE USU_USUARIO=" & "'" & USUARIO.Text & "'", cnn)
            cnn.Open()
            Dim dr As SQLiteDataReader = Sqlstr.ExecuteReader(CommandBehavior.CloseConnection)
            While dr.Read
                Dim value As Object = dr.Item("USU_ZONA")
                If value IsNot DBNull.Value Then TextBox1.Text = CStr(value)
            End While
            dr.Close()
        End If
    End Sub
End Class

Vale decir que el codigo lo ejecuto directo en el Captor, la base la tengo en mi pc en la carpeta de donde vb.net deja los proyectos, dentro de ella hay una carpeta con el nobre de mi proyecto y dentro de esta una que se llama debug en esta ultima es donde tengo mi base de datos.

.::IT::.

#5
En cuanto estabilidad pues yo lo uso siempre en las configuraciones de mis programas para Windows Form, pero no me bajo el instalador si no

http://sourceforge.net/projects/sqlite-dotnet2/files/SQLite%20for%20ADO.NET%202.0/1.0.66.0/SQLite-1.0.66.0-binaries.zip/download

la pagina official del proyecto es:

http://sqlite.phxsoftware.com/

Nota: recien ahora me doy cuenta que en http://www.connectionstrings.com/sqlite  hablan de http://sqlite.phxsoftware.com/ entonces son lo mismo jaja
Simplemente .::IT::.

.::IT::.

#6
Yo Borraria

Imports System.Data.SQLite.SQLiteConnection
Imports System.Data.SQLite.SQLiteCommand
Imports System.Data.SQLite.SQLiteTransaction
Imports System.Data.SQLite.SQLiteDataReader


No es necesario o por lo menos yo no lo pongo.

En cuanto al error o no te conectaste a la base de datos correctame o la tabla simplemente no existe!!!!!!!! si puedes subir tu base de datos pues te podria ayudar!!!!!!!!
y si no es mucho pedir tu proyecto para poder ayudarte mas rapido  ;D

Y Por utlimo en:

Data Source=CLAS_MOBILE.db

Asumes que la base de datos esta en el mismo lugar que el ejecutable a lo mejor no encuentra la base de datos.



Simplemente .::IT::.

proteus8

#7
Vale!!! IT
en este ftp esta mi proyecto y mi base, ojala puedas ayudarme!!

ftp://200....
en envie un mp con los datos
usuario ftp: xxx
pass ftp: xxxx

desde ya muchas gracias....

.::IT::.

#8
"SQLite error no such table: CMB_USUARIO" acabo de probar las fuentes que me mandaste y eh llegado a la conclusión que sencillamente la base de datos no se copia al emulador o en tu caso al dispositivo. Para ello use "File.Exists("CLAS_MOBILE.db")" y siempre me decia que no existe la base de datos

Código (vbnet) [Seleccionar]
If (File.Exists("CLAS_MOBILE.db")) Then                
       consulta = String.Format("SELECT USU_USUARIO,USU_ZONA FROM CMB_USUARIO WHERE USU_USUARIO='{0}'", USUARIO.Text)

       Dim Ada As New SQLiteDataAdapter()
       Dim Sqlstr As New SQLiteCommand(consulta, cnn)
       Dim dr As SQLiteDataReader = Sqlstr.ExecuteReader(CommandBehavior.CloseConnection)
       While dr.Read
            Dim value As Object = dr.Item("USU_ZONA")
            If value IsNot DBNull.Value Then TextBox1.Text = CStr(value)
       End While
       dr.Close()
Else
       MessageBox.Show("No existe base de datos", "Error")
End If


Solución:

1° Método que no entendí porque me dio flojera :
visita http://social.msdn.microsoft.com/Forums/es/netfxcompactes/thread/265e4adb-ba0c-440a-808a-f63590ada195 y has lo que hay dicen para poder copiar archivos(tu base de datos entre otras cosas) al emulador o copia directamente al dispositivo en el que estás trabajando  y si es posible explícame.

2° Método que yo haría si fuera el caso:

Pues consiste en crear la base de datos con código, para ello has de tomar en cuenta que si al "SQLiteConnection" le enviamos como parámetro "Data Source=CLAS_MOBILE.db"  y ejecutamos el método Open() pues no genera ningún error así "CLAS_MOBILE.db" no exista, y tranquilamente ejecutas un CREATE TABLE:

Código (vbnet) [Seleccionar]

Private Sub CrearTablas(ByVal Cnn As SQLiteConnection)
       Using _Cmd As SQLiteCommand = Cnn.CreateCommand
            _Cmd.CommandText = "CREATE TABLE CMB_USUARIO (USU_USUARIO VARCHAR (8) NOT NULL,USU_PASS VARCHAR (8) NOT NULL,USU_ZONA VARCHAR (25) NOT NULL)"
            _Cmd.ExecuteNonQuery()

           _Cmd.CommandText = "INSERT INTO CMB_USUARIO VALUES('usu01','123456','peru')"
           _Cmd.ExecuteNonQuery()
       End Using
End Sub


despues podrias colocar en el evento load del form lo siguiente:

Código (vbnet) [Seleccionar]

cnn = New SQLiteConnection("Data Source=CLAS_MOBILE.db;Version=3;")
cnn.Open()
Try
    If (Not File.Exists("CLAS_MOBILE.db")) Then
        CrearTablas(cnn)
    End If
Catch ex As Exception
    MessageBox.Show(ex.Message, "Error")
End Try


aquí todo el code:

Código (vbnet) [Seleccionar]
Imports System
Imports System.Data
Imports System.IO
Imports System.Data.SQLite

Public Class Form1
   Public ruta As String
   Dim cnn As New SQLiteConnection
   Public consulta As String
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       cnn = New SQLiteConnection("Data Source=CLAS_MOBILE.db;Version=3;")
       cnn.Open()
       Try
           If (Not File.Exists("CLAS_MOBILE.db")) Then
               CrearTablas(cnn)
           End If
       Catch ex As Exception
           MessageBox.Show(ex.Message, "Error")
       End Try
   End Sub

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

       If USUARIO.Text = "" Or PASSWORD.Text = "" Then
           MessageBox.Show("Debe Ingresar Usuario y Contraseña")
       Else
           Try
               If (File.Exists("CLAS_MOBILE.db")) Then

                 
                   consulta = String.Format("SELECT USU_USUARIO,USU_ZONA FROM CMB_USUARIO WHERE USU_USUARIO='{0}'", USUARIO.Text)

                   Dim Ada As New SQLiteDataAdapter()
                   Dim Sqlstr As New SQLiteCommand(consulta, cnn)
                   Dim dr As SQLiteDataReader = Sqlstr.ExecuteReader(CommandBehavior.CloseConnection)
                   While dr.Read
                       Dim value As Object = dr.Item("USU_ZONA")
                       If value IsNot DBNull.Value Then TextBox1.Text = CStr(value)
                   End While
                   dr.Close()
               Else
                   MessageBox.Show("No existe base de datos", "Error")
               End If
           Catch ex As Exception
               MessageBox.Show(ex.Message, "Error")
           End Try
       End If
   End Sub

   Private Sub CrearTablas(ByVal Cnn As SQLiteConnection)
       Using _Cmd As SQLiteCommand = Cnn.CreateCommand

           _Cmd.CommandText = "CREATE TABLE CMB_USUARIO (USU_USUARIO VARCHAR (8) NOT NULL,USU_PASS VARCHAR (8) NOT NULL,USU_ZONA VARCHAR (25) NOT NULL)"
           _Cmd.ExecuteNonQuery()

           _Cmd.CommandText = "INSERT INTO CMB_USUARIO VALUES('usu01','123456','peru')"
           _Cmd.ExecuteNonQuery()
       End Using
   End Sub
End Class



Nota: Yo usaria un Select Count para comprobar usuario y un ExecuteScalar para recoger el valor devuelto si es cero el usuario no existe y si es 1 pues si.

Saludos y suerte!!!!!!!!!
Simplemente .::IT::.

proteus8

IT gracias maestro!!!!  ;-)  ;-)  ;-)  ;-)  ;-)  ;-) te pasaste, grande!!!
funciono a la perfecion,,
oye otra consulta, la base de datos se crea en una carpeta del captor que seria como el disco C en un pc, el problema es que cuando a los captores se les agota la bateria se borra todo lo que esta en esta carpeta, lo unico que queda es lo que esta en una carpeta llamada BACKUP dentro del captor, por lo que quiero dejar la base de datos dentro de esta carpeta, intente hacerlo a si que copie la base dentro de esa carpeta y deje el codigo del programa de la siguiente manera, pero me me tomo me dice que la base no existe!!...
codigo:
Código (vbnet) [Seleccionar]

cnn = New SQLiteConnection("Data Source=\BACKUP\BD\CLAS_MOBILE.db;Version=3;")