escribir en una BD Access desde visual studioNet

JoMa

visual studio net 2003

Buenas pues comento la situacion, a ver tengo un listbox cn una serie de " clientes " total, q cuando pulso en uno de esa lista, lo busca en la base de datos mediante un codigo y muestra una serie de informacion en unos textbox.

asi que el tema de consultar los datos de la base d datos funciona correctamente. el problema viene a la hora de escribir, q no se como se hace ...

os pongo el codigo del ListBox1_SelectedIndexChanged ( es decir, d cuando pulso algun cliente de la lista )

    Dim codigo As Integer
    Dim Sql As String
    Dim conexion As Odbc.OdbcConnection
    Dim comando As Odbc.OdbcCommand
    Dim Lector As Odbc.OdbcDataReader

    Try
        codigo = ListBox2.Items.Item(ListBox1.SelectedIndex)
        Sql = "SELECT * FROM movil WHERE codigo=" & codigo

        conexion = New Odbc.OdbcConnection(conexion2)
        conexion.Open()
        comando = New Odbc.OdbcCommand(Sql)
        comando.Connection = conexion
        Lector = comando.ExecuteReader

        Lector.Read()
        TextBox1.Text = Lector("codigo")
        TextBox2.Text = Lector("mes")
        TextBox3.Text = Lector("importe") & " €"
        TextBox4.Text = Lector("concepto")

        Lector.Close()
        conexion.Close()
        comando = Nothing
        conexion = Nothing

    Catch ex As Exception
        MsgBox("ERROR: " & ex.Message)
    End Try

para leer con el " Dim Lector As Odbc.OdbcDataReader " y el executereader y tal pos se lee, pero ahora lo q necesito es escribir desde otro formulario rellenando los distintos textbox y pulsando algun botoncito xd

bueno pos espero alguna respuesta interesante,

gracias de antemano,

saludos.

P.D: no existe un datawrite o algo asi ? xDDD

trinytron

Desconozco si existe en visual 2k3 (solo he trabajado con esto en 2k5) pero... que tal si le usas un Dataset(Conjunto de datos) que es todo gráfico y te creas tus consultas, procedimientos, funciones y solo tendrás que llamar a los métodos del dataset que albergan esas consultas? La verdad esque es muy sencillo y te ahorras lineas de código pueso que todo el código relacionado con conexiones y consultas lo gestiona el dataset.

Soltrac

A ver, tienes 2 opciones. O usar datasets como te dice #2, o seguir con el método a pelo que usas, en este caso, debes hacer una consulta de tipo "INSERT" o "UPDATE" igual que haces la "SELECT", pero en vez de abrirla con executereader, la abres con executenonquery

Algo asi como...

sql = "INSERT INTO tuTabla(col1,col2,...) VALUES(1,'PEPE'...)

conexion = New Odbc.OdbcConnection(conexion2)
conexion.Open()
comando = New Odbc.OdbcCommand(Sql)

comando.executenonquery()
conexion.close()

Eso si, para evitar Sql injection, debes aprender a utilizar parámetros, si quieres q te explique un poco sobre ellos para aplicarlos en .NET, me avisas :P

JoMa

gracias por las 2 respuestas , al final he usado la forma de #3 , eso si, valiente coñazo el tema de las comas y las comillas cuando se usan nunmeros y letras xD

gracias a los 2 y te tomo la palabra #3 jeje

kas

Soltrac serias muy amable si expusieras esos conocimientos en vez de esperar a que alguien los pregunte, por ejemplo en un post nuevo!

Hay algunos atajos como el de:

SQLCommand comando = miconexion.CreateComand();

JoMa

buenas aki ando d nuevo xD

weno creo q lo comente anteriormente, yo meto los datos en una base de datos ... ok,

tonces tengo un apartado de consulta en el cual en un " listbox " van saliendo los distintos " clientes " q tengo en la BD , al pulsar en uno de ellos en la parte de la derexa me salen en distintos textbox's su informacion correctamnt ... ok. los textbox estan con el " read only on " para q no se pueda toketear

ahora hice un boton de " modificar " que cuando lo pulsas se ponen los textbox disponibles para q el usuario cambie los datos y cuando pulse otro boton de aplicar cambios hago esta sentencia :

" comando.CommandText = "Update movil set codigo = " & TextBox1.Text & ", nombre = '" & TextBox2.Text & "', apellidouno = '" & TextBox3.Text & "', apellidodos = '" & TextBox4.Text & "', mes = '" & ComboBox2.SelectedItem & "', importe = " & TextBox6.Text & ", concepto = '" & TextBox8.Text & "', compañia = '" & ComboBox3.SelectedItem & "'" & ";" "

osea q cada apartado lo cambie por el nuevo, no ?

pos coge y me cambia la base de datos entera osea si yo tenia distintos clientes ahora tengo solo ese repetirdo x el numero de clientes q tuviera antes ( si tenia 8 clientes distintos ahora el prograsmita me mete 8 veces la misma informacion ) ...

alguna razon d pq puede pasar esto ?

gracias de antemano nuevament

saludos,

p.d : piro ya a dormir pq paso d rallarme mas xD

Soltrac

#6 claro tio! pq si tu ves tu sentencia update, pones algo así...

UPDATE Tabla SET Campo1 = Valor1, Campo2 = Valor2...

Entonces cambia todos esos campos

Para que solo cambie los registros que tu quieres, tienes que utilizar un WHERE....

UPDATE Tabla SET Campo1 = Valor1, Campo2 = Valor2...
WHERE idTabla = 1

Por ejemplo....Y asi solo cambiaria los Campo1 y Campo2 de los registros en los que la columna idTabla = 1...

Soltrac

#5 claro! Mira..

sql = "INSERT INTO tuTabla(col1,col2,...) VALUES(@p1,@p2)

'@p1 y @p2 son 2 parametros vale?

conexion = New SqlConnection(conexion2)
conexion.Open()
comando = New SqlCommand(sql)

Dim p1 As SqlParameter = comando.Parameters.Add("@p1", SqldbType.NVarchar) <- Cambia un poco si es VB2003 o 2005, pero vamos, q no tendrás problemas.

Dim pq2 As SqlParameter = comando.Parameters.Add("@p2", sqldbType.Integer)

p1.Value = "Pepe"
p2.Value = 1

Y asi te evitas el sql injection :)

PD: Siento haber contestado tan tarde, es q no habia visto el post hasta hoy.

Saludos!

comando.executenonquery()
conexion.close()

JoMa

si si , tio lo he pensao ta mñn yendo a las practicas ... el where, es mas keria haber escrito antes de q nadie lo hiciera, gracias x la respuesta :$

Usuarios habituales

  • JoMa
  • Soltrac
  • kas
  • trinytron