// Registra un nuevo usuario del personal. // Se puede registrar solamente el usuario, // o el usuario y además vincular una tarjeta. #region InsertaNuevoPersonal public static int InsertaNuevoPersonal(string nombre, int hSemanales, int hAnuales, string idTarjeta) { // Registra un nuevo usuario del personal. // Guarda datos en tres tablas: // 1. Tabla Personal: Genera un random ID, guarda nombre y apellidos // 2. Tabla Horario: Guarda los horarios y el ID personal // 3. Tabla Tarjeta: Guarda el ID de la tarjeta registrada con el usuario #region Declaración OleDbCommands OleDbCommand insertaPersonalCmd = new OleDbCommand { CommandText = String.Format("INSERT INTO Personal (PersonalNombre) VALUES ('{0}')", nombre), Connection = dbConnection }; OleDbCommand insertaHorarioCmd = new OleDbCommand { CommandText = String.Format("INSERT INTO Horario (PersonalId, NumHorasSemanales, NumHorasAnuales) VALUES (X, {0}, {1})", hSemanales, hAnuales), Connection = dbConnection }; OleDbCommand insertaTarjetaCmd = null; if (idTarjeta != "") { insertaTarjetaCmd = new OleDbCommand { CommandText = String.Format("INSERT INTO Tarjeta (TarjetaId, PersonalId) VALUES ('{0}', X)", idTarjeta), Connection = dbConnection }; } OleDbCommand selectComprovacionTarjetaCmd = new OleDbCommand { CommandType = CommandType.Text, CommandText = String.Format("SELECT * FROM Tarjeta WHERE TarjetaId LIKE '{0}'", idTarjeta), Connection = dbConnection }; OleDbCommand selectIdPersonalCmd = new OleDbCommand { CommandType = CommandType.Text, CommandText = "SELECT TOP 1 * FROM Personal ORDER BY PersonalId DESC", Connection = dbConnection }; #endregion try { if (dbConnection.State != ConnectionState.Open) { dbConnection.Open(); } // Comprueba que la tarjeta que se quiere // vincular no esté ya registrada OleDbDataReader dataReaderTarjeta = selectComprovacionTarjetaCmd.ExecuteReader(); if (dataReaderTarjeta.HasRows) { return(-1); } // Si no lo está, inserta el usuario insertaPersonalCmd.ExecuteNonQuery(); // Después recoge el ID para poder insertarlo en las otras tablas int idPersonal = -2; OleDbDataReader dataReader = selectIdPersonalCmd.ExecuteReader(); while (dataReader.Read()) { insertaHorarioCmd.CommandText = insertaHorarioCmd.CommandText.Replace("X", dataReader.GetValue(0).ToString()); if (insertaTarjetaCmd != null) { insertaTarjetaCmd.CommandText = insertaTarjetaCmd.CommandText.Replace("X", dataReader.GetValue(0).ToString()); } idPersonal = (int)dataReader.GetValue(0); } // Y finalmente inserta el horario y // la tarjeta (en caso de que tenga) insertaHorarioCmd.ExecuteNonQuery(); if (insertaTarjetaCmd != null) { insertaTarjetaCmd.ExecuteNonQuery(); } dbConnection.Close(); return(idPersonal); } catch (OleDbException ex) { #if Debug GlobalData.PrintDebug("EXCEPCIÓN BD", ex.Message); GlobalData.PrintDebug("EXCEPCIÓN BD", ex.StackTrace); #endif return(-3); } catch (InvalidOperationException ex) { #if Debug GlobalData.PrintDebug("EXCEPCIÓN BD", ex.Message); GlobalData.PrintDebug("EXCEPCIÓN BD", ex.StackTrace); #endif return(-4); } }
// Devuelve el nombre del personal con el ID de tarjeta indicado #region NombreDePersonalConIDTarjeta public static string NombreDePersonalConIDTarjeta(long tarjetaId) { string nombre = ""; OleDbCommand selectPersonalIdCmd = new OleDbCommand { CommandText = String.Format("SELECT PersonalId FROM Tarjeta WHERE TarjetaId LIKE '{0}'", tarjetaId.ToString()), Connection = dbConnection }; OleDbCommand selectNombreCmd = new OleDbCommand { CommandText = "SELECT PersonalNombre FROM Personal WHERE PersonalId LIKE X", Connection = dbConnection }; try { if (dbConnection.State != ConnectionState.Open) { dbConnection.Open(); } OleDbDataReader dataReaderPersonalId = selectPersonalIdCmd.ExecuteReader(); if (dataReaderPersonalId.HasRows) { while (dataReaderPersonalId.Read()) { selectNombreCmd.CommandText = selectNombreCmd.CommandText.Replace("X", dataReaderPersonalId.GetValue(0).ToString()); } } else { return("null"); } OleDbDataReader dataReaderNombre = selectNombreCmd.ExecuteReader(); if (dataReaderNombre.HasRows) { while (dataReaderNombre.Read()) { nombre = dataReaderNombre.GetValue(0).ToString(); } } else { return("null"); } dbConnection.Close(); return(nombre); } catch (OleDbException ex) { MessageBox.Show("Ha habido un problema con la base de datos. ", "Error", MessageBoxButton.OK, MessageBoxImage.Warning); #if Debug GlobalData.PrintDebug("ERROR ACCESS", "Mensaje: " + ex.Message); GlobalData.PrintDebug("ERROR ACCESS", "StackTrace: " + ex.StackTrace); #endif return(null); } catch (InvalidOperationException ex) { MessageBox.Show("Ha habido un problema en la escritura a la base de datos. ", "Error", MessageBoxButton.OK, MessageBoxImage.Warning); #if Debug GlobalData.PrintDebug("ERROR ACCESS", "Mensaje: " + ex.Message); GlobalData.PrintDebug("ERROR ACCESS", "StackTrace: " + ex.StackTrace); #endif return(null); } }
// Recoge los datos de la lista de tarjetas vinculadas #region LeerDatosTarjetas public static ObservableCollection <Tarjeta> LeerDatosTarjetas() { ObservableCollection <Tarjeta> listaTarjetas = new ObservableCollection <Tarjeta>(); OleDbCommand selectTarjetasCmd = new OleDbCommand { CommandType = CommandType.Text, CommandText = "SELECT * FROM Tarjeta", Connection = dbConnection }; OleDbCommand selectPersonalCmd = new OleDbCommand { CommandType = CommandType.Text, CommandText = "SELECT * FROM Personal", Connection = dbConnection }; try { if (dbConnection.State != ConnectionState.Open) { dbConnection.Open(); } // Lee los resultados de la tabla Tarjetas y crea // la lista, sin los nombres OleDbDataReader dataReader = selectTarjetasCmd.ExecuteReader(); while (dataReader.Read()) { listaTarjetas.Add( new Tarjeta( dataReader.GetValue(0).ToString(), new Personal((int)dataReader.GetValue(1)) ) ); } // Lee la tabla de Personal y añade los nombres // a la lista de tarjetas dataReader = selectPersonalCmd.ExecuteReader(); while (dataReader.Read()) { foreach (Tarjeta tarjeta in listaTarjetas) { if (tarjeta.Personal.Id == (int)dataReader.GetValue(0)) { tarjeta.Personal.Nombre = dataReader.GetValue(1).ToString(); } } } dbConnection.Close(); } catch (OleDbException ex) { MessageBox.Show("Ha habido un problema en la escritura a la base de datos. " + "No se ha podido insertar la nueva información.", "Error", MessageBoxButton.OK, MessageBoxImage.Warning); #if Debug GlobalData.PrintDebug("ERROR ACCESS", "Mensaje: " + ex.Message); GlobalData.PrintDebug("ERROR ACCESS", "StackTrace: " + ex.StackTrace); GlobalData.PrintDebug("ERROR ACCESS", "Código error: " + ex.ErrorCode); #endif } return(listaTarjetas); }