Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Matisca en 21 Enero 2015, 06:27 am



Título: Comprobar cambios en los registros
Publicado por: Matisca en 21 Enero 2015, 06:27 am
Hola, necesito actualizar los datos de una cierta tabla de una base de datos, pero quiero actualizarlos solamente si no hubo cambios en los mismos. Trabajo con access, Tengo este codigo pero capturo el error que dice "@oldnombre no tiene un valor predeterminado", no se cual puede llegar a ser el problema. Gracias

Código
  1.  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.        Try
  3.            connetionString = "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=C:\concurrencia\base.accdb;"
  4.            connection = New OleDbConnection(connetionString)
  5.            connection.Open()
  6.            adapter = New OleDbDataAdapter("SELECT * from tabla2", connection)
  7.            adapter.Fill(DataSet, "tabla2")
  8.            tabla = New DataTable()
  9.            adapter.Fill(tabla)
  10.  
  11.        Catch ex As Exception
  12.            MsgBox(ex.ToString)
  13.        End Try
  14.    End Sub
  15.  
  16. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  17.        Try
  18.            Dim comando As OleDbCommand = connection.CreateCommand()
  19.            adapter.UpdateCommand = New OleDbCommand("UPDATE tabla2 set nombre=@nombre, apellido=@apellido WHERE nombre=@oldnombre AND apellido=@oldapellido", connection)
  20.            adapter.UpdateCommand.Parameters.Add("@nombre", OleDbType.VarChar, 255).Value = txtID.Text
  21.            adapter.UpdateCommand.Parameters.Add("@apellido", OleDbType.VarChar, 255).Value = txtCharData.Text
  22.            parameter = adapter.UpdateCommand.Parameters.Add("@oldnombre", OleDbType.VarChar, 255, "nombre")
  23.            parameter.SourceVersion = DataRowVersion.Original
  24.            parameter = adapter.UpdateCommand.Parameters.Add("@oldapellido", OleDbType.VarChar, 255, "apellido")
  25.            parameter.SourceVersion = DataRowVersion.Original
  26.  
  27.        adapter.UpdateCommand.ExecuteNonQuery()
  28.  
  29.            adapter.Update(dataset, "tabla2")
  30.            adapter.Fill(dataset, "tabla2")
  31.     connection.Close()
  32.        Catch ex As Exception
  33.            MsgBox(ex.ToString)
  34.        End Try
  35.    End Sub



[MOD]: Utiliza el botón de "Insertar código", gracias.


Título: Re: Comprobar cambios en los registros
Publicado por: Eleкtro en 21 Enero 2015, 07:11 am
capturo el error que dice "@oldnombre no tiene un valor predeterminado", no se cual puede llegar a ser el problema.

Prueba a añadir un valor predeterminado.

Un valor DBNull.Value en lugar de un null:
Código
  1. parameter = adapter.UpdateCommand.Parameters.Add("@oldnombre", OleDbType.VarChar, 255, "nombre").Value = DBNull.Value
  2. parameter = adapter.UpdateCommand.Parameters.Add("@oldapellido", OleDbType.Char, 255, "apellido").Value = DBNull.Value

Saludos


Título: Re: Comprobar cambios en los registros
Publicado por: Matisca en 21 Enero 2015, 10:27 am
Hola, ya lo hice, pero ahora no se guardan los registros en la base de datos con la sentencia update. La idea es saber si los registros en la base de datos cambiaron.
@oldapellido y @oldnombre supongo que debe ser los datos que habian en un comienzo en la base de datos, en el momento en que llene el dataset. Yo quiero hacer una actualizacion masiva de datos, pero antes de hacerla necesito saber si estos registros cambiaron desde la ultima vez que los consulte. Gracias