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
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();
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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas