Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: proteus8 en 13 Enero 2011, 01:30 am



Título: Conectar Bv.Net con Sqlite
Publicado por: proteus8 en 13 Enero 2011, 01:30 am
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.


Título: Re: Conectar Bv.Net con Sqlite
Publicado por: [D4N93R] en 13 Enero 2011, 06:20 am
http://www.connectionstrings.com/sqlite


Título: Re: Conectar Bv.Net con Sqlite
Publicado por: .::IT::. en 13 Enero 2011, 07:04 am
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!!!!!!!!


Título: Re: Conectar Bv.Net con Sqlite
Publicado por: [D4N93R] en 13 Enero 2011, 14:43 pm
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!


Título: Re: Conectar Bv.Net con Sqlite
Publicado por: proteus8 en 13 Enero 2011, 19:39 pm
 [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
  1. Imports System
  2. Imports System.Data
  3. Imports System.Data.SQLite
  4. Imports System.Data.SQLite.SQLiteConnection
  5. Imports System.Data.SQLite.SQLiteCommand
  6. Imports System.Data.SQLite.SQLiteTransaction
  7. Imports System.Data.SQLite.SQLiteDataReader
  8. Public Class Form1
  9.    Public ruta As String
  10.    Public consulta As String
  11.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  12.  
  13.    End Sub
  14.  
  15.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  16.  
  17.        If USUARIO.Text = "" Or PASSWORD.Text = "" Then
  18.            MessageBox.Show("Debe Ingresar Usuario y Contraseña")
  19.        Else
  20.            Dim cnn As New SQLiteConnection("Data Source=CLAS_MOBILE.db;Version=3;")
  21.            Dim Ada As New SQLiteDataAdapter()
  22.            Dim Sqlstr As New SQLiteCommand("SELECT USU_USUARIO,USU_ZONA FROM CMB_USUARIO WHERE USU_USUARIO=" & "'" & USUARIO.Text & "'", cnn)
  23.            cnn.Open()
  24.            Dim dr As SQLiteDataReader = Sqlstr.ExecuteReader(CommandBehavior.CloseConnection)
  25.            While dr.Read
  26.                Dim value As Object = dr.Item("USU_ZONA")
  27.                If value IsNot DBNull.Value Then TextBox1.Text = CStr(value)
  28.            End While
  29.            dr.Close()
  30.        End If
  31.    End Sub
  32. End Class
  33.  
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.


Título: Re: Conectar Bv.Net con Sqlite
Publicado por: .::IT::. en 13 Enero 2011, 19:43 pm
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


Título: Re: Conectar Bv.Net con Sqlite
Publicado por: .::IT::. en 13 Enero 2011, 19:56 pm
Yo Borraria

Código:
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:

Código:
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.





Título: Re: Conectar Bv.Net con Sqlite
Publicado por: proteus8 en 13 Enero 2011, 20:29 pm
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....


Título: Re: Conectar Bv.Net con Sqlite
Publicado por: .::IT::. en 13 Enero 2011, 23:11 pm
"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
  1. If (File.Exists("CLAS_MOBILE.db")) Then                
  2.        consulta = String.Format("SELECT USU_USUARIO,USU_ZONA FROM CMB_USUARIO WHERE USU_USUARIO='{0}'", USUARIO.Text)
  3.  
  4.        Dim Ada As New SQLiteDataAdapter()
  5.        Dim Sqlstr As New SQLiteCommand(consulta, cnn)
  6.        Dim dr As SQLiteDataReader = Sqlstr.ExecuteReader(CommandBehavior.CloseConnection)
  7.        While dr.Read
  8.             Dim value As Object = dr.Item("USU_ZONA")
  9.             If value IsNot DBNull.Value Then TextBox1.Text = CStr(value)
  10.        End While
  11.        dr.Close()
  12. Else
  13.        MessageBox.Show("No existe base de datos", "Error")
  14. 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
  1. Private Sub CrearTablas(ByVal Cnn As SQLiteConnection)
  2.        Using _Cmd As SQLiteCommand = Cnn.CreateCommand
  3.             _Cmd.CommandText = "CREATE TABLE CMB_USUARIO (USU_USUARIO VARCHAR (8) NOT NULL,USU_PASS VARCHAR (8) NOT NULL,USU_ZONA VARCHAR (25) NOT NULL)"
  4.             _Cmd.ExecuteNonQuery()
  5.  
  6.            _Cmd.CommandText = "INSERT INTO CMB_USUARIO VALUES('usu01','123456','peru')"
  7.            _Cmd.ExecuteNonQuery()
  8.        End Using
  9. End Sub

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

Código
  1. cnn = New SQLiteConnection("Data Source=CLAS_MOBILE.db;Version=3;")
  2. cnn.Open()
  3. Try
  4.     If (Not File.Exists("CLAS_MOBILE.db")) Then
  5.         CrearTablas(cnn)
  6.     End If
  7. Catch ex As Exception
  8.     MessageBox.Show(ex.Message, "Error")
  9. End Try

aquí todo el code:

Código
  1. Imports System
  2. Imports System.Data
  3. Imports System.IO
  4. Imports System.Data.SQLite
  5.  
  6. Public Class Form1
  7.    Public ruta As String
  8.    Dim cnn As New SQLiteConnection
  9.    Public consulta As String
  10.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  11.        cnn = New SQLiteConnection("Data Source=CLAS_MOBILE.db;Version=3;")
  12.        cnn.Open()
  13.        Try
  14.            If (Not File.Exists("CLAS_MOBILE.db")) Then
  15.                CrearTablas(cnn)
  16.            End If
  17.        Catch ex As Exception
  18.            MessageBox.Show(ex.Message, "Error")
  19.        End Try
  20.    End Sub
  21.  
  22.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  23.  
  24.        If USUARIO.Text = "" Or PASSWORD.Text = "" Then
  25.            MessageBox.Show("Debe Ingresar Usuario y Contraseña")
  26.        Else
  27.            Try
  28.                If (File.Exists("CLAS_MOBILE.db")) Then
  29.  
  30.  
  31.                    consulta = String.Format("SELECT USU_USUARIO,USU_ZONA FROM CMB_USUARIO WHERE USU_USUARIO='{0}'", USUARIO.Text)
  32.  
  33.                    Dim Ada As New SQLiteDataAdapter()
  34.                    Dim Sqlstr As New SQLiteCommand(consulta, cnn)
  35.                    Dim dr As SQLiteDataReader = Sqlstr.ExecuteReader(CommandBehavior.CloseConnection)
  36.                    While dr.Read
  37.                        Dim value As Object = dr.Item("USU_ZONA")
  38.                        If value IsNot DBNull.Value Then TextBox1.Text = CStr(value)
  39.                    End While
  40.                    dr.Close()
  41.                Else
  42.                    MessageBox.Show("No existe base de datos", "Error")
  43.                End If
  44.            Catch ex As Exception
  45.                MessageBox.Show(ex.Message, "Error")
  46.            End Try
  47.        End If
  48.    End Sub
  49.  
  50.    Private Sub CrearTablas(ByVal Cnn As SQLiteConnection)
  51.        Using _Cmd As SQLiteCommand = Cnn.CreateCommand
  52.  
  53.            _Cmd.CommandText = "CREATE TABLE CMB_USUARIO (USU_USUARIO VARCHAR (8) NOT NULL,USU_PASS VARCHAR (8) NOT NULL,USU_ZONA VARCHAR (25) NOT NULL)"
  54.            _Cmd.ExecuteNonQuery()
  55.  
  56.            _Cmd.CommandText = "INSERT INTO CMB_USUARIO VALUES('usu01','123456','peru')"
  57.            _Cmd.ExecuteNonQuery()
  58.        End Using
  59.    End Sub
  60. End Class
  61.  
  62.  

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!!!!!!!!!


Título: Re: Conectar Bv.Net con Sqlite
Publicado por: proteus8 en 14 Enero 2011, 03:27 am
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
  1. cnn = New SQLiteConnection("Data Source=\BACKUP\BD\CLAS_MOBILE.db;Version=3;")


Título: Re: Conectar Bv.Net con Sqlite
Publicado por: .::IT::. en 14 Enero 2011, 03:36 am
En File.Exists() debes pasarle la ruta de la base de datos talves es ese tu problema


Título: Re: Conectar Bv.Net con Sqlite
Publicado por: proteus8 en 14 Enero 2011, 04:01 am
 ;D ;D ;D ;D ;D   eso era, Gracias nuevamente!!!