Adicionar y Consultar

Tengo el siguiente código... ¿me ayudas a corregirlo? He probado de varias maneras y me salen errores...
La idea es verificar si la cedula existe... Y mostrar mensaje, si no insertar datos...
Protected Sub Wizard1_FinishButtonClick(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.WizardNavigationEventArgs) Handles Wizard1.FinishButtonClick
LeerValores()
End Sub
Public Sub LeerValores()
Dim cadenaConexion As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\App_Data\Certificacion.mdb"
Dim conexiondb As New OleDbConnection(cadenaConexion)
conexiondb.Open()
Dim consulta As String
consulta = "SELECT * FROM Datos WHERE trim(str(cedula))= " & ident.Text & ""
If (consulta.EOF = True) Then
Msg_ced.Text = "INFORMACION YA REGISTRADA"
Else
AgregarValores()
Msg_add.Text = "DATOS INGRESADOS "
End If
Dim sql As New OleDbCommand(consulta, conexiondb)
sql.ExecuteNonQuery()
conexiondb.Close()
End Sub
Public Sub AgregarValores()
Dim cadenaConexion As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\App_Data\Certificacion.mdb"
Dim conexiondb As New OleDbConnection(cadenaConexion)
conexiondb.Open()
Dim SENTENCIA As String
SENTENCIA = "insert into Certif_Peritos values (" & ident.Text & ",'" & nombre.Text & "','" & apellido1.Text & "','" & apellido2.Text & "')"
Dim sql As New OleDbCommand(SENTENCIA, conexiondb)
sql. ExecuteNonQuery()
Conexiondb. Close()
End Sub
1

1 Respuesta

350 pts.
A ver, no lo pude probar pero ahí te va
Public Sub LeerValores()
Dim ident As TextBox
Dim dt As DataTable
Dim da As New OleDb.OleDbDataAdapter
Dim cadenaConexion As String = MyConexion
Dim conexiondb As New OleDb.OleDbConnection(cadenaConexion)
conexiondb.Open()
Dim consulta As String
consulta = "SELECT * FROM Datos WHERE trim(str(cedula))= '" & ident.Text & "'"
Dim sql As New OleDb.OleDbCommand(consulta, conexiondb)
'sql.ExecuteNonQuery()
da.SelectCommand = sql ' se lo asigno al dataadapter
da.Fill(dt) ' lleno un datatable con los resultados
conexiondb.Close() ' cierro la conexion
If dt.Rows.Count = 0 Then ' Si el select viene vacio
Msg_ced.Text = "INFORMACION YA REGISTRADA"
Else
'si es true esta todo OK, si es falso se hace rollback no se inserta nada y se muestra un mensaje de error
If AgregarValores() = True Then Msg_add.Text = "DATOS INGRESADOS "
End If
conexiondb.Close()
End Sub
Public Function AgregarValores() As Boolean
Dim cadenaConexion As String = MyConexion
Dim SENTENCIA As String
Dim conexiondb As New OleDb.OleDbConnection(cadenaConexion)
Dim transOledb As OleDb.OleDbTransaction
Try
If conexiondb.State = 1 Then conexiondb.Close()
conexiondb.Open()
SENTENCIA = "insert into Certif_Peritos values (" & ident.Text & ",'" & nombre.Text & "','" & apellido1.Text & "','" & apellido2.Text & "')"
Dim sql As New OleDb.OleDbCommand(SENTENCIA, conexiondb)
transOledb = conexiondb.BeginTransaction() 'abro la transaccion para la insersion
sql.Transaction = transOledb ' le asigno la insersion al command
sql.ExecuteNonQuery()
transOledb.Commit() ' cierro la trans en caso que no haya habido problemas
Return True ' devuelvo true
Catch ex As Exception
transOledb.Rollback() 'mando todo los cambios para atras si hubo algun error
Msg_ced.Text = "HUBO UN ERROR EN LA BASE DE DATOS"
Return False ' retorno falso
Finally
Conexiondb. Close() ' por aca entra siempre, sin importar si hubo error o no por lo cual cierro la conexion
End Try
End Function
Function MyConexion() As String
Dim cadenaConexion As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\App_Data\Certificacion.mdb"
Return cadenaConexion
End Function
Te recomiendo usar es encapsular los datos importantes como por ejemplo el string de conexión como hice acá con una función lo podes poner, osea la idea que que este escrito 1 sola vez en el código para que el día de mañana que tengas que modificar no tengas que buscar en todo el código, solo en ese lugar. Lo ideal es que la pongas fuera del código (en un xml por ejemplo).
Bueno avisame cualquier cosa lo vemos.
Hola.. muchas gracias.. ya lo probé... pero me sale un error "El código de usuario no controló NullReferenceException" al hacer el Select *...
Y sin correrlo, dentro del código aparecen subrayados los campos dt en: da.Fill(dt), también en ident en: WHERE trim(str(cedula))= '" & ident.Text & "'"
 y transOledb en: transOledb.Rollback(), con el mensaje "la variable se utiliza antes de que se le haya asignado un valor. Podría darse una excepción de referencia nula en tiempo de ejecución"
¿Cómo lo puedo solucionar? Muchas gracias!
Ahí corregí algunas cosas y lo probé en un proyecto winform que me arme así rapido, lo único que no toque es la inserción que fíjate que te deje un template para armarla bien.
Public Sub LeerValores()
'ident es el textbox donde obtenes la Cedula, (creo :P)
Dim dt As New DataTable
Dim da As New OleDb.OleDbDataAdapter
Dim cadenaConexion As String = MyConexion
Dim conexiondb As New OleDb.OleDbConnection(cadenaConexion)
conexiondb.Open()
Dim consulta As String
consulta = "SELECT * FROM Datos WHERE trim(str(cedula))= '" & ident.Text & "'"
Dim sql As New OleDb.OleDbCommand(consulta, conexiondb)
da.SelectCommand = sql ' se lo asigno al dataadapter
da.Fill(dt) ' lleno un datatable con los resultados
conexiondb.Close() ' cierro la conexion
If dt.Rows.Count = 1 Then ' Si el select viene con algo es porque ya existe
Msg_ced.Text = "INFORMACION YA REGISTRADA"
Else
'si es true esta todo OK, si es falso se hace rollback no se inserta nada y se muestra un mensaje de error
If AgregarValores() = True Then Msg_add.Text = "DATOS INGRESADOS "
End If
conexiondb.Close()
End Sub
Public Function AgregarValores() As Boolean
'ident es el textbox donde obtenes la Cedula, (creo :P)
Dim cadenaConexion As String = MyConexion()
Dim SENTENCIA As String = ""
Dim conexiondb As New OleDb.OleDbConnection(cadenaConexion)
Dim transOledb As OleDb.OleDbTransaction = Nothing
Try
If conexiondb.State = 1 Then conexiondb.Close()
conexiondb.Open()
transOledb = conexiondb.BeginTransaction() 'abro la transaccion para la insersion
SENTENCIA = "insert into Certif_Peritos (" & ident.Text & ",'" & nombre.Text & "','" & apellido1.Text & "','" & apellido2.Text & "')"
'INSERT INTO "nombre_tabla" ("columna1", "columna2", ...)VALUES ("valor1", "valor2", ...)
'Fijate como armar la consulta de Insert con el template quete puse arriba
Dim sql As New OleDb.OleDbCommand(SENTENCIA, conexiondb)
sql.Transaction = transOledb ' le asigno la insersion al command
sql.ExecuteNonQuery()
transOledb.Commit() ' cierro la trans en caso que no haya habido problemas
Return True ' devuelvo true
Catch ex As Exception
transOledb.Rollback() 'mando todo los cambios para atras si hubo algun error
Msg_ced.Text = "HUBO UN ERROR EN LA BASE DE DATOS"
Return False ' retorno falso
Finally
Conexiondb. Close() ' por aca entra siempre, sin importar si hubo error o no por lo cual cierro la conexion
End Try
End Function
Function MyConexion() As String
Dim cadenaConexion As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\App_Data\Certificacion.mdb"
Return cadenaConexion
End Function
Cualquier cosa avisa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas