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