Pregunta sobre SQL Server
Buenas tardes, mi nombre es Tere Castro, y estoy trabajando para una cadena de supermercados .
En la actualidad manejamos un sistema en las cajas registradoras echo en clipper y que usa dbfs.
Nos queremos migrar a Sql Server con Visual .NET, el problema es que necesito sabes si en Sql Server existe la opcion de que en caso de que falle la red siga funcionando el programa en modo local y que una ves que se restablesca la coneccion se pueda actualizar la informacion en la base de datos de la red.
Espero me haya explicado bien y me puedan dar un Norte de como empezar.
Muchas Gracias
En la actualidad manejamos un sistema en las cajas registradoras echo en clipper y que usa dbfs.
Nos queremos migrar a Sql Server con Visual .NET, el problema es que necesito sabes si en Sql Server existe la opcion de que en caso de que falle la red siga funcionando el programa en modo local y que una ves que se restablesca la coneccion se pueda actualizar la informacion en la base de datos de la red.
Espero me haya explicado bien y me puedan dar un Norte de como empezar.
Muchas Gracias
Se me ocurren dos opciones:
Por ejemplo, yo tengo un sistema en el cual tenemos tres bases de datos(producción, desarrollo y pruebas). En el login de la aplicación aparte de pedir un usuario y contraseña, pido un parametro adicional, el cual me indica a cual de las tres bases de datos me quiero comunicar.
La otra, es que el SQL Server permite tener bases de datos replicadas(creo que esto es lo que mas te convendría). Tener una instalación local, y una base de datos remota central. Busca en la ayuda de SQL Server sobre replicación.
Por ejemplo, yo tengo un sistema en el cual tenemos tres bases de datos(producción, desarrollo y pruebas). En el login de la aplicación aparte de pedir un usuario y contraseña, pido un parametro adicional, el cual me indica a cual de las tres bases de datos me quiero comunicar.
La otra, es que el SQL Server permite tener bases de datos replicadas(creo que esto es lo que mas te convendría). Tener una instalación local, y una base de datos remota central. Busca en la ayuda de SQL Server sobre replicación.
@Tere,
SQL Server tiene la capacidad de manejar transacciones, lo que evita la pérdida de datos en caso de que una instrucción que agregue o modifique información falle, ya que se haría un RollBack, regresando la información al estado previo (no se pierde nada).
Tú desde tu aplicación .NET, validarías que la transacción se haya ejecutado sin problemas y en caso de ser así (que por ejemplo no exista conexión a la base de datos), grabar la información en una tabla temporal (con la misma estructura a la utilizada en la bd remota (en el server). Podrías programar un componente que monitoree la conexión con el servidor y en caso de que encuentre respuesta hacer la transferencia de los datos en tu tabla local (o en un archivo .XML, que ya es soportado por la version .NET de ADO) a la base de datos remota). Pero te aclaro... NO ES UNA CARACTERISTICA DE SQL el actualizar los datos en caso de falla. ESA ES TU FUNCION COMO PROGRAMADOR.
Aquí está un ejemplo de cómo podrías hacer uso de una transacción en VB.NET. Necesitarás una buena actualización para hacer el cambio de CLipper VB.NET o C# .NET (ya que no dices que lenguaje .NET utilizarás).
Visual Basic .NET
' Transactions should be enclosed in a Try...Catch...Finally
' block to catch any exceptions that might occur
Dim myTransaction As System.Data.OleDb.OleDbTransaction
Try
myConnection.Open()
' This creates a new transaction object and assigns it to
' myTransaction
myTransaction = myConnection.BeginTransaction
' Adds Update1 and Update2 to the transaction.
Update1.Transaction = myTransaction
Update2.Transaction = myTransaction
' Executes Update1 and Update2
Update1.ExecuteNonQuery()
Update2.ExecuteNonQuery()
' If no exceptions occur, commits the transaction
myTransaction.Commit()
Catch ex As Exception
' The transaction is not executed if an exception occurs
myTransaction.Rollback()
Finally
' Whether an exception occurs or not, the connection is then closed
myConnection.Close()
End Try
SQL Server tiene la capacidad de manejar transacciones, lo que evita la pérdida de datos en caso de que una instrucción que agregue o modifique información falle, ya que se haría un RollBack, regresando la información al estado previo (no se pierde nada).
Tú desde tu aplicación .NET, validarías que la transacción se haya ejecutado sin problemas y en caso de ser así (que por ejemplo no exista conexión a la base de datos), grabar la información en una tabla temporal (con la misma estructura a la utilizada en la bd remota (en el server). Podrías programar un componente que monitoree la conexión con el servidor y en caso de que encuentre respuesta hacer la transferencia de los datos en tu tabla local (o en un archivo .XML, que ya es soportado por la version .NET de ADO) a la base de datos remota). Pero te aclaro... NO ES UNA CARACTERISTICA DE SQL el actualizar los datos en caso de falla. ESA ES TU FUNCION COMO PROGRAMADOR.
Aquí está un ejemplo de cómo podrías hacer uso de una transacción en VB.NET. Necesitarás una buena actualización para hacer el cambio de CLipper VB.NET o C# .NET (ya que no dices que lenguaje .NET utilizarás).
Visual Basic .NET
' Transactions should be enclosed in a Try...Catch...Finally
' block to catch any exceptions that might occur
Dim myTransaction As System.Data.OleDb.OleDbTransaction
Try
myConnection.Open()
' This creates a new transaction object and assigns it to
' myTransaction
myTransaction = myConnection.BeginTransaction
' Adds Update1 and Update2 to the transaction.
Update1.Transaction = myTransaction
Update2.Transaction = myTransaction
' Executes Update1 and Update2
Update1.ExecuteNonQuery()
Update2.ExecuteNonQuery()
' If no exceptions occur, commits the transaction
myTransaction.Commit()
Catch ex As Exception
' The transaction is not executed if an exception occurs
myTransaction.Rollback()
Finally
' Whether an exception occurs or not, the connection is then closed
myConnection.Close()
End Try
