Pregunta sobre diseño aplicación: Control de errores Base de Datos

24/02/2004 - 11:18 por Alejandro Bibiano González | Informe spam
A ver si me explico bien y alguien me puede ayudar con esta questión de
diseño.

Estoy desarrollando ua aplicación Cliente/Servidor tradicional con WinForms
en C#.

Me he creado unos dataset personalizados para cada tabla, así como un objeto
que gestiona los inserts, updates y selects.

Por ejemplo, tengo una clase Usuario que tiene métodos para seleccionar,
insertar y modificar usuarios (siempre a través de un dataset).

En mis formularios uso este objeto para poblar los dataset y actualizar los
datos. Hasta aquí todo bastante bien, pero ahora viene mi pregunta. ¿Donde
hago el control de errores? Por ejemplo, quiero comprobar que no haya 2
usuarios con el mismo nombre. En la base de datos el campo es "Unique" por
lo que mi objeto usuario lanzará una excepción cuando intente actualizar los
datos. ¿Debo controlar este error en mi objeto usuario (al haser el update
del dataadapter), en el formulario donde hago la actualización, o en otro
sitio?

Me gustaría centralizar la detección de errors de base de datos para no
tener que repetir siempre el mismo código.

Saludos y gracias

Alex Bibiano
 

Leer las respuestas

#1 Camilo Villa
24/02/2004 - 14:42 | Informe spam
Si manejas una arquitectura de 3 niveles, las validaciones las harías en los
objetos que invocan directamente a los Storeprocedures, bajo el esquema Try,
catch Finally.

Te recomiendo trabajar con objetos SqlTransaction, y los objetos Command
como StoreProcedures donde trates los procesos de inserción, actualización y
borrado a nivel de transacciones y así puedes controlar los errores de
duplicación. o de base de datos.

ejemplo:



public void EjecutarTransaccionSql(string miCadenaConexion)
{
SqlConnection miConexion = new SqlConnection(miCadenaConexion);
miConexion.Open();

SqlCommand myCommand = miConexion.CreateCommand();
SqlTransaction miTransaccion;

// Inicia una transacción local
miTransaccion = miConexion.BeginTransaction();
// Debe asignar ambos objetos el de conexion y el de transacción
// al objeto Comando el cual depende de la transacción local
myCommand.Connection = miConexion;
myCommand.Transaction = miTransaccion;

try
{
//Aquí las transacciones de inserción, actualización o borrado
miTransaccion.Commit(); // Confirma que efectivamente se halla
realizado la transacción,
}
catch(Exception e) //Captura excepciones generales.
{
try
{
miTransaccion.Rollback(); //Le hace RollBack a la transacción si
encuentra alguna transacción
}
catch (SqlException ex) //Captura excepciones de Sql.
{
if (miTransaccion.Connection != null)
{
MessageBox.Show("una Excepción de Tipo" + ex.GetType() + "fue
encontrada mientras se intentaba hacer un roll back a la transacción.");
}
}
MessageBox.Show("Una excepción de tipo " + e.GetType() + " fue
encontrada mientras se intentaba insertar datos.");
MessageBox.Show("Ningun registro fue grabado en la base de datos.");
}
finally
{
miConexion.Close();
}
}

Camilo Villa
APTECH Certified Visual Studio .NET - Microsoft 3 DCE
"Alejandro Bibiano González" escribió en el
mensaje news:u1pID%23r%
A ver si me explico bien y alguien me puede ayudar con esta questión de
diseño.

Estoy desarrollando ua aplicación Cliente/Servidor tradicional con


WinForms
en C#.

Me he creado unos dataset personalizados para cada tabla, así como un


objeto
que gestiona los inserts, updates y selects.

Por ejemplo, tengo una clase Usuario que tiene métodos para seleccionar,
insertar y modificar usuarios (siempre a través de un dataset).

En mis formularios uso este objeto para poblar los dataset y actualizar


los
datos. Hasta aquí todo bastante bien, pero ahora viene mi pregunta. ¿Donde
hago el control de errores? Por ejemplo, quiero comprobar que no haya 2
usuarios con el mismo nombre. En la base de datos el campo es "Unique" por
lo que mi objeto usuario lanzará una excepción cuando intente actualizar


los
datos. ¿Debo controlar este error en mi objeto usuario (al haser el update
del dataadapter), en el formulario donde hago la actualización, o en otro
sitio?

Me gustaría centralizar la detección de errors de base de datos para no
tener que repetir siempre el mismo código.

Saludos y gracias

Alex Bibiano


Preguntas similares