Visual Basic.NET - VB.NET y SQLite, error con parámetros

 
Vista:
sin imagen de perfil
Val: 41
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

VB.NET y SQLite, error con parámetros

Publicado por Diego (16 intervenciones) el 12/10/2019 15:41:40
Buen día....
Nunca utilicé SQLite...y me está dando un error de parametros insuficientes...apelo a sus conocimientos
El error dice "Unknow error. Insufficent parameters supplied to the command"
Lo que no logro entender es por qué ante instrucciones practicamente iguales en una se cargan los parametros correctamente y en otras no.

Código correcto: (Elimina un registro)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Function ClientesEliminar(ByVal cliente As Clientes) As Boolean
    Try
        Conectar()
        Using conn
            Dim cmd As SQLiteCommand = conn.CreateCommand()
            cmd.CommandText = "update tbl_clientes set activo=0 where id=@id"
            cmd.Parameters.Add(New SQLiteParameter("@id", cliente._id)) ' PARAMETRO CORRECTO
            If cmd.ExecuteNonQuery() Then
                Desconectar()
                Return True
            Else
                Desconectar()
                Return False
            End If
        End Using
    Catch ex As Exception
        MsgBox(ex.Message)
        Desconectar()
        Return False
    End Try
End Function



Código con error (debería devolver una tabla)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Public Function TraerX(ByVal cliente As Clientes) As DataTable
    Try
        Conectar()
        Using conn
            Dim cmd As SQLiteCommand = conn.CreateCommand()
            cmd.CommandText = "select * from tbl_clientes where id=@id "
            cmd.Parameters.Add(New SQLiteParameter("@id", cliente._id))
            Dim da As New SQLiteDataAdapter(cmd.CommandText, conn)
            Dim datos As New DataSet()
            Dim tabla As New DataTable
            da.Fill(datos)
            Desconectar()
            tabla = datos.Tables(0)
            Return tabla
        End Using
    Catch ex As Exception
        MsgBox(ex.Message)
        Desconectar()
        Return Nothing
    End Try
 
End Function


Si en lugar de intentar usar parámetros concateno dentro de la instrucción SQL con las propiedades del objeto cliente funciona perfecto, pero la idea es tener mas ordenado el código, ya que algunas instrucciones tienen mas de 20 parámetros y es muy desprolijo hacerlo así.

En definitiva...no se como agregar los parámetros en consultas que devuelven datos, las que ejecutan un insert, update o delete funciona bien, pero en las select no me los toma.

Alguna sugerencia ?

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 41
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

VB.NET y SQLite, error con parámetros

Publicado por Diego (16 intervenciones) el 12/10/2019 17:24:37
Solucionado....
COdigo correcto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Function TraerX(ByVal cliente As Clientes) As String
    Try
        Conectar()
        Using conn
            Dim cmd As SQLiteCommand = conn.CreateCommand()
            cmd.CommandText = "select * from tbl_clientes where id=@id"
            cmd.Parameters.AddWithValue("@id", cliente._id)
            Dim da As New SQLiteDataAdapter(cmd)  'ACA ESTABA EL ERROR
            Dim datos As New DataSet()
            Dim tabla As New DataTable
            da.Fill(datos)
            Desconectar()
            tabla = datos.Tables(0)
            Return tabla.Rows(0).Item(0) & tabla.Rows(0).Item(1) & tabla.Rows(0).Item(2)
            'Return tabla
        End Using
    Catch ex As Exception
        MsgBox(ex.Message)
        Desconectar()
        Return Nothing
    End Try
 
End Function


Al DataAdaspter hay que pasarle el objeto command completo, porque al pasarle solo el commandtext no realiza el reemplazo ya que no contiene parameters.

Gracias igual, espero le sirva a alguien
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar