Este metodo que estoy usando esta bien?

Iniciado por enterariel, 30 Abril 2009, 17:24 PM

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

enterariel


Para cargar una tabla en un ListView utilizo este codigo...



Imports System.Data.OleDb


    Private Sub Cargar_ListView_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim CNN As New OleDb.OleDbConnection
        Dim DT As New DataTable
        Dim DA As New OleDb.OleDbDataAdapter
        Dim CMD As New OleDb.OleDbCommand

        CNN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\CONTROL_SERVICENTRO\COMBUSTIBLES.mdb"
        CNN.Open()

        CMD.Connection = CNN
        CMD.CommandText = "SELECT * FROM PERSONAL"
        CMD.CommandType = CommandType.TableDirect
        DA.SelectCommand = CMD
        DA.Fill(DT)

        For Each DR As DataRow In DT.Rows
            Dim item As ListViewItem
            item = New ListViewItem(DR("CODIGO").ToString)
            item.SubItems.Add(DR("NOMBRE").ToString)
            item.SubItems.Add(DR("TURNO").ToString)
            ListView1.Items.Add(item)
        Next

    End Sub


'Este aca me carga todo se necesita cerrar la base de datos ahi???

'--------------------------------------------------------------------------------------------------------------------------------------------

'//Este Utilizo para cargar un registro en TextBox

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

        Dim cnn As New OleDb.OleDbConnection
        Dim dt As New DataTable
        Dim da As New OleDb.OleDbDataAdapter
        Dim cmd As New OleDb.OleDbCommand

        cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\CONTROL_SERVICENTRO\COMBUSTIBLES.mdb"
        cnn.Open()

        cmd.Connection = cnn
        cmd.CommandText = "SELECT * FROM PERSONAL WHERE CODIGO='10'"
        cmd.CommandType = CommandType.TableDirect
        da.SelectCommand = cmd
        da.Fill(dt)

        TextBox1.Text = CStr(dt.Rows(intFile)("CODIGO"))
        TextBox2.Text = CStr(dt.Rows(intFile)("NOMBRE"))
        TextBox3.Text = CStr(dt.Rows(intFile)("TURNO"))

    End Sub


'Este aca me carga todo se necesita cerrar la base de datos ahi???

'--------------------------------------------------------------------------------------------------------------------------------------------

'Esta parte es lo que mas me interesa Guardar varios registro al mismo tiempo, En un control ListView tengo unos registro tiene que guardar todo el contenido


    Private Sub Guardar_todo_el_contenido_de_un_ListView_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

        Dim I As Integer = 0

        For I = 0 To ListView2.Items.Count - 1

            Dim cnx As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\CONTROL_SERVICENTRO\COMBUSTIBLES.mdb")
            Dim SQLGuardar As String

            SQLGuardar = "INSERT INTO PERSONAL VALUES(@CODIGO,@NOMBRE,@TURNO)"

            Dim cmd As New OleDbCommand(SQLGuardar, cnx)
            cmd.CommandType = CommandType.Text

            cmd.Parameters.AddWithValue("@CODIGO", ListView2.Items(I).Text)
            cmd.Parameters.AddWithValue("@NOMBRE", ListView2.Items(I).SubItems(1).Text)
            cmd.Parameters.AddWithValue("@TURNO", ListView2.Items(I).SubItems(2).Text)

            cmd.CommandType = CommandType.Text
            cnx.Open()
            cmd.ExecuteNonQuery()
            cnx.Close()

        Next I

    End Sub


Pueden ayudarme a optimizar o mejorar o como estoy usando esta bien, gracias

odeONeSs

Esta bien utilizado, pero por ejemplo el campo codigo en la base de datos, deberia ser un numero entero si no quieres poner un codigo tipo "ASA10B", ya que a la hora de hacer consultas es mas rápido, y lo de utilizar los comandos evita la inyeccion sql, pero  para mayor seguridad y que no se te salgan de rango o de tipo prueba con:

cmd.Parameters.Add("@NOMBRE", OleDbType.VarChar, 40)
cmd.Parameters("@NOMBRE").Value = "Juan luis gomez"

El 40 define la anchura máxima del campo de la base de datos y  OleDbType.VarChar el tipo de datos que almacena.
Por que en el caso de que el nombre ocupe mas de 40 caracteres y en la base de datos este configurado así, saltará un error que podras controlar.

Un saludo!!
Cambio de firma de prueba

MANULOMM

Otro asunto que podes tener en cuenta es no utilizar "Select * From" pues solo estas utilizando los campos nombre,codigo,turno, haz el select asi "Select Nombre,Codigo,Turno From" esto optimiza el acceso a datos.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia