Operaciones C# y Sql

Hola vfportero, disculpa las molestias.
Tengo un problema con la base de datos, utilizo SQL 2005 express, C# 2008 express y para modificar la base utilizo las sentencias linq.
En un formulario, busco un registro y muestro los datos en las cajas que puse, modifico los datos y doy en guardar cambios. Sin cerrar el formulario vuelvo a buscar el mismo registro y aparece sin modificaciones hechas. Cierro el formulario y lo vuelvo abrir y busco el registro y ya aparece los cambio hechos. Pienso que es por no actualizar o refrescar la Base, así que utilizo basedatos.SubmitChanges pero el resultado es el mismo. Tienes idea del por que? Cualquier ayuda gracias.

2 respuestas

Respuesta
1
No es ninguna molestia, ya veras eso ocurre porque no estas haciendo un refrescamiento al data contexto
lo puedes refrescar justo tiene un sentencia refresh, haciendo un new datacontext o lo que yo te recomiendo es volviendo a generar la grilla ya con los datos cambiados
pruébale con cualquiera de las 3 y te ha de servir, ya que al hacer el submitchanges ya estas como haciendo el commit de los cambios
Hola, gracias por contestar, utilizo el winforms y utilizo cajas de texto, textbox, el problema es que no me refresca la base de datos, lo verifique paso por paso y el registro que modifico y lo busco me encuentra los datos sin modificar
ahh ok primero al dar clic en la grilla o buscar el objeto debes asignarlo aun objeto
PERSONA objPersona = datacontexto.PERSONAs.Where(p=>p.codigo = 1).single();
//PERSONA  = nombre de la tabla
//datacontexto = nombre del contextolinq
objPersona.primerNombre = "Hola"; //aquí le asignas
// lo de los txt o lo que quieras al objeto
datacontexto.SubmitChanges(); //actualizar es como commit;
Pruébale de esa forma por favor y de ahí lo ves si se te cambia en la base de datos, ojo puede ser que la sintaxis no este correcta, pero esa es la idea
saludos
Respuesta
1
Siempre has de hacer SubmitChanges del DataContext para que los cambios en los objetos se apliquen a la base de datos..
Lo correcto es tener un solo DataContext como variable estática y usarla para hacer las consultas y las modificaciones.
Si vas creando nuevas instancias del DataContext los cambios que hagas en objetos de diferentes contextos no se verán entre sí.
Por ejemplo. Si haces:
DataContext db1 = new DataContext();
db1.Clientes.InsertOnSubmit(....);
Y luego, en otro formulario, vuelves a crear el DataContext:
DataContext nuevoDb1 = new DataContext():
//Aquí no tendríamos el "Cliente" que hemos insertado en db1
Como ya te comento, para trabajar con Entity Framework o Linq To Sql, lo ideal es tener una clase estática con el contexto protegido por un Singleton:
class Contexto
{
private static DataContext _baseDeDatos;
public static DataContext BaseDeDatos
{
if (_baseDeDatos == null)
{
_baseDeDatos = new DataContext();
}
return _baseDeDatos;
}
}
Y luego, desde cualquier formulario, haces las consultas directamente así (ejemplo de recorrerte un listado de "Clientes"):
for each (Cliente cliente in Contexto.BaseDeDatos.Clientes)
{
}
o para insertar directamente:
Contexto.BaseDeDatos.Clientes.InsertOnSubmit(nuevoObjetoDeCliente);
Contexto.BaseDeDatos.SubmitChanges();

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas