Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/05/2010, 07:06
will50ft
 
Fecha de Ingreso: junio-2006
Mensajes: 15
Antigüedad: 18 años, 5 meses
Puntos: 0
Información problema insertando datos con visual basic 2008+sql server

Saludos Amigos:
El codigo debajo es un ejemplo para consultar a una bd si la huella digital de un empleado corresponde a su codigo ingresado.
lo que intento es que ante la consulta correcta se inserte un campo en otra tabla donde se contenga el codigo del empleado y un timestamp.

soy nuevo en basic, y a mi entender realize los comentarios del codigo espero puedan ayudarme gracias.

Código:
Imports System.Windows.Forms
Imports System.Data.SqlClient

Public Class dlgUserInfo

    Public UserId As String = ""    'usado para devolver el usuario id al formulario central
    Public userRow As DataRow       'construye una fila del generador
    Private context As Integer = 0  ' inicializa contexto a 0
    Private dbConnection As SqlConnection   'variable de conexion a base de datos
    Public template As DPFP.Template 'template para almacenar en db o retornarlo al formulario
    Private tableName As String      'obtenido desde app.config nombre de la tabla
    Private userIDColumn As String   'obtenido desde app.config la columna user
    Private userTemplateColumn As String 'retreived from app.config - la columna template
    'aqui defino mis variables de escritura en otra tabla
    Public tblReg As String 'aqui mi tabla de registro
    Private tiempo As String    ' aqui mi variable de tiempo
    Private regIDColumn As String   'aqui mi columna reg id
    Private regTiempoColumn As String  ' aqui la columna tiempo
    Public regRow As DataRow


    Public Sub New(ByRef _template As DPFP.Template)
        'inicializa componente
        InitializeComponent()

        Try
            'asigna template a la variable recibida por referencia
            template = _template
            'asigna el nombre de la tabla desde la configuracion de app.config, columna
            tableName = System.Configuration.ConfigurationSettings.AppSettings("UserTable")
            userIDColumn = System.Configuration.ConfigurationSettings.AppSettings("ColUserId")
            userTemplateColumn = System.Configuration.ConfigurationSettings.AppSettings("ColUserTemplate")
            
            'aqui inicializo mis variables pa usarlas localmente
            tblReg = System.Configuration.ConfigurationSettings.AppSettings("RegTable")
            regIDColumn = System.Configuration.ConfigurationSettings.AppSettings("ColRegID")
            regTiempoColumn = System.Configuration.ConfigurationSettings.AppSettings("ColRegTiempo")

            'creao la coneccion segun app.config y la apertura
            dbConnection = New SqlConnection(System.Configuration.ConfigurationSettings.AppSettings("ConnectionString"))

            dbConnection.Open()
            'captura cualquier error
        Catch ex As Exception
            MessageBox.Show("Exception: " & ex.Message)
        End Try
    End Sub

    'al hacer clic en boton ok
    Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
        If tbUserId.Text = "" Then
            MessageBox.Show("Ingrese su codigo")
            Return
        End If
        Try
            'crea e inicializa variables dataset, adaptador, y comando
            Dim dataSet As DataSet = New DataSet()
            Dim adapter As SqlDataAdapter = New SqlDataAdapter()
            Dim sqlCommand As SqlCommand = New SqlCommand()
            sqlCommand.CommandText = "Select " & userIDColumn & "," & userTemplateColumn & " from " & tableName & " where " & userIDColumn & " ='" & tbUserId.Text & "'"
            sqlCommand.CommandType = CommandType.Text
            sqlCommand.Connection = dbConnection
            adapter.SelectCommand = sqlCommand
            adapter.Fill(dataSet, tableName)
            'si template no esta vacia, entonces guarda
            If template IsNot Nothing Then    'If template is valid, try to save template
                'comando construir inicializa segun adapter
                Dim bldr As SqlCommandBuilder = New SqlCommandBuilder(adapter)

                'si el resultado de la consulta es 0 o no existe usuario con esa ID
                If dataSet.Tables(0).Rows.Count = 0 Then    'If no rows return-hence no user exists by that ID
                    'crea una variable bytes imagino para almacenar la huella
                    Dim bytes As Byte() = Nothing
                    template.Serialize(bytes)
                    userRow = dataSet.Tables(tableName).NewRow()
                    'guarda la info
                    userRow(userTemplateColumn) = bytes
                    userRow(userIDColumn) = tbUserId.Text
                    'agrega los datos anteriores a la tabla
                    dataSet.Tables(tableName).Rows.Add(userRow)
                    'actualiza la tabla
                    adapter.Update(dataSet, tableName)


                Else   'si el usuario existe, sobreescribre la data -- aqui seria 

                    Dim bytes As Byte() = Nothing
                    template.Serialize(bytes)
                    userRow = dataSet.Tables(tableName).NewRow()
                    userRow(userTemplateColumn) = bytes
                    userRow(userIDColumn) = tbUserId.Text
                    dataSet.Tables(tableName).Rows.Add(userRow)
                    adapter.Update(dataSet, tableName)
                    'aqui pongo mi codigo de insercion
                    

                End If 'fin de guardaje de datos de usuario


                'AQUI ES DONDE SE COMPARA LA CORRECTITUD DE HUELLA CODIGO
            Else  'caso contrario necesita obtener el template para el usuario, limpia el template
                If dataSet.Tables(0).Rows.Count = 0 Then
                    MessageBox.Show("Usuario No Registrado, Reingrese su codigo")
                    Return
                End If
                Dim bytes As Byte() = Nothing
                bytes = dataSet.Tables(0).Rows(0)(userTemplateColumn)
                template = New DPFP.Template()
                template.DeSerialize(bytes)
            End If
        Catch ex As Exception

            'CASO CONTRARIO MUESTRA Q TODO OK COMPARACION
        End Try
        UserId = tbUserId.Text
        Me.DialogResult = System.Windows.Forms.DialogResult.OK

        'Este es el codigo que anadi pensando en que funcionaria...
        Dim dbcon As SqlConnection
        Dim sqlinserta As String
        sqlinserta = "INSERT INTO" & tblReg & "(" & regIDColumn & "," & regTiempoColumn & ")" & "VALUES" & "(" & tbUserId.Text & "," & DateTime.Now & ")"

        dbcon = New SqlConnection(System.Configuration.ConfigurationSettings.AppSettings("ConnectionString"))
        Dim comando As New SqlCommand(sqlinserta, dbcon)
        comando.Parameters.AddWithValue("userIDColumn", tbUserId.Text) 'nombre del parametro y el objeto... valores y ubicaciones
        comando.Parameters.AddWithValue("regTiempoColumn", DateTime.Now)

        dbcon.Open()
        comando.ExecuteNonQuery()
        dbcon.Close()

        Me.Close()
    End Sub
    'boton cancelar, simplemente limpia el campo de texto
    Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
        Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
        UserId = ""
        Me.Close()
    End Sub
    'cerrando el formulario cierra la conexion
    Private Sub dlgUserId_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        If dbConnection IsNot Nothing Then
            If dbConnection.State <> ConnectionState.Closed Then
                dbConnection.Close()
            End If
        End If
    End Sub

    Private Sub dlgUserInfo_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Cancel_Button.Visible = False
    End Sub
End Class