10/05/2010, 07:06
|
| | Fecha de Ingreso: junio-2006
Mensajes: 15
Antigüedad: 18 años, 5 meses Puntos: 0 | |
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
|