public bool ActualizarUsuarioCambioGrupo(Usuario usuario) { SQLConexion conn = new SQLConexion(); List <SqlParameter> parametros = new List <SqlParameter>(); try { conn.Conectar(cadenaConexion); parametros.Add(new SqlParameter("@id", usuario.IdUsuario)); parametros.Add(new SqlParameter("@idGrupo", usuario.IdGrupo)); parametros.Add(new SqlParameter("@nombre", usuario.Nombre)); parametros.Add(new SqlParameter("@apellido", usuario.Apellido)); parametros.Add(new SqlParameter("@correo", usuario.Correo)); parametros.Add(new SqlParameter("@con", usuario.Contrasenia)); conn.PrepararProcedimiento("sp_actualizarUsuario", parametros); conn.EjecutarProcedimiento(); string query1 = "DELETE FROM CursoEmpleado WHERE IdUsuario = " + usuario.IdUsuario + ";"; SqlConnection conexionQuery1 = new SqlConnection(cadenaConexion); conexionQuery1.Open(); SqlCommand cmd1 = new SqlCommand(query1, conexionQuery1); cmd1.ExecuteNonQuery(); string query2 = "SELECT IdCurso FROM Curso WHERE IdGrupo = " + usuario.IdGrupo + ";"; SqlConnection conexionQuery2 = new SqlConnection(cadenaConexion); conexionQuery2.Open(); SqlCommand cmd2 = new SqlCommand(query2, conexionQuery2); SqlDataReader reader = cmd2.ExecuteReader(); List <int> idCursos = new List <int>(); while (reader.Read()) { idCursos.Add((int)reader["IdCurso"]); } for (int i = 0; i < idCursos.Count; i++) { List <SqlParameter> parametrosCursoEmpleado = new List <SqlParameter>(); parametrosCursoEmpleado.Add(new SqlParameter("@idUsuario", usuario.IdUsuario)); parametrosCursoEmpleado.Add(new SqlParameter("@idCurso", idCursos[i])); conn.PrepararProcedimiento("sp_InsertarCursoEmpleado", parametrosCursoEmpleado); conn.EjecutarProcedimiento(); } return(true); } catch (Exception Ex) { return(false); throw Ex; } finally { conn.Desconectar(); } }
public IHttpActionResult Delete(int id) { SQLConexion _conexion = new SQLConexion(); List <SqlParameter> _Parametros = new List <SqlParameter>(); DataTableReader _dtr = null; try { _conexion.Conectar(System.Configuration.ConfigurationManager.ConnectionStrings["MiBD"].ToString()); _Parametros.Add(new SqlParameter("@id", id)); _conexion.PrepararProcedimiento("sp_DeleteDet", _Parametros); _dtr = _conexion.EjecutarTableReader(); } catch (Exception e) { throw new Exception(e.Message); } finally { _conexion.Desconectar(); _conexion = null; _dtr = null; } return(Ok()); }
public void Updates(string user) { SQLConexion _conexion = new SQLConexion(); List <SqlParameter> _Parametros = new List <SqlParameter>(); DataTableReader _dtr = null; List <User> _list = new List <User>(); try { //se abre conexion _conexion.Conectar(System.Configuration.ConfigurationManager.ConnectionStrings["MiBD"].ToString()); _Parametros.Add(new SqlParameter("@id", user.ToString())); _conexion.PrepararProcedimiento("sp_UdtEst", _Parametros); _dtr = _conexion.EjecutarTableReader(); } catch (Exception ex) { throw new Exception(ex.Message); } finally { _conexion.Desconectar(); _conexion = null; _dtr = null; } }
public bool CrearEvaluacion(List <Pregunta> preguntas, int idCurso) { SQLConexion conn = new SQLConexion(); List <SqlParameter> parametros = new List <SqlParameter>(); try { conn.Conectar(cadenaConexion); for (int i = 0; i < preguntas.Count; i++) { List <SqlParameter> parametrosPreguntas = new List <SqlParameter>(); parametrosPreguntas.Add(new SqlParameter("@idCurso", idCurso)); parametrosPreguntas.Add(new SqlParameter("@pregunta", preguntas[i].PreguntaNombre)); parametrosPreguntas.Add(new SqlParameter("@respuestacorr", preguntas[i].RespuestaCorrecta)); parametrosPreguntas.Add(new SqlParameter("@respuestaincorr1", preguntas[i].RespuestaIncorrecta1)); parametrosPreguntas.Add(new SqlParameter("@respuestaincorr2", preguntas[i].RespuestaIncorrecta2)); conn.PrepararProcedimiento("sp_crearPregunta", parametrosPreguntas); conn.EjecutarProcedimiento(); } return(true); } catch (Exception Ex) { return(false); throw Ex; } finally { conn.Desconectar(); } }
/// <summary> /// La funcion actualiza el curso /// </summary> /// <param name="curso">Recibe un parametro de tipo Curso. Es importante incluir todos los atributos de Curso <see cref="Curso"/> para actualizar exitosamente</param> /// <returns>Retorna un valor booleano. True para exito en la creacion. False para fallo en la creacion</returns> /// <example> /// <code> /// Curso curso = new Curso /// { /// IdCurso = 1, /// Nombre = "Atencion a clientes 2", /// UrlDescarga = curso.UploadCourse(), /// Vigencia = new DateTime(2019, 06, 20 , 10, 39, 30) /// }; /// ActualizarCurso(curso); /// </code> /// </example> public bool ActualizarCurso(Curso curso) { SQLConexion conn = new SQLConexion(); List <SqlParameter> parametros = new List <SqlParameter>(); try { conn.Conectar(cadenaConexion); parametros.Add(new SqlParameter("@idcurso", curso.IdCurso)); parametros.Add(new SqlParameter("@nombre", curso.Nombre)); parametros.Add(new SqlParameter("@urlDescarga", curso.UrlDescarga)); parametros.Add(new SqlParameter("@vigencia", curso.Vigencia)); conn.PrepararProcedimiento("sp_ModificarCurso", parametros); conn.EjecutarProcedimiento(); return(true); } catch (Exception Ex) { return(false); throw Ex; } finally { conn.Desconectar(); } }
/// <summary> /// Esta funcion Actualiza el usuario. /// </summary> /// <param name="usuario">Recibe un objeto de tipo usuario con todos sus atributos <see cref="Usuario"/></param> /// <returns></returns> public bool ActualizarUsuario(Usuario usuario) { SQLConexion conn = new SQLConexion(); List <SqlParameter> parametros = new List <SqlParameter>(); try { conn.Conectar(cadenaConexion); parametros.Add(new SqlParameter("@id", usuario.IdUsuario)); parametros.Add(new SqlParameter("@idGrupo", usuario.IdGrupo)); parametros.Add(new SqlParameter("@nombre", usuario.Nombre)); parametros.Add(new SqlParameter("@apellido", usuario.Apellido)); parametros.Add(new SqlParameter("@correo", usuario.Correo)); parametros.Add(new SqlParameter("@con", usuario.Contrasenia)); conn.PrepararProcedimiento("sp_actualizarUsuario", parametros); conn.EjecutarProcedimiento(); return(true); } catch (Exception Ex) { return(false); throw Ex; } finally { conn.Desconectar(); } }
public IHttpActionResult Authenticate(Usuarios usuario) { if (usuario == null) { throw new HttpResponseException(HttpStatusCode.BadRequest); } SQLConexion _conexion = new SQLConexion(); List <SqlParameter> _Parametros = new List <SqlParameter>(); DataTableReader _dtr = null; List <Usuarios> _list = new List <Usuarios>(); try { _conexion.Conectar(System.Configuration.ConfigurationManager.ConnectionStrings["MiBD"].ToString()); _Parametros.Add(new SqlParameter("@nick", usuario.Nick)); _Parametros.Add(new SqlParameter("@pass", usuario.Password)); _conexion.PrepararProcedimiento("sp_auth", _Parametros); _dtr = _conexion.EjecutarTableReader(); if (_dtr.HasRows && _dtr.Read()) { var token = TokenGenerator.GenerateTokenJwt(usuario.Password); return(Ok(token)); } else { return(Unauthorized()); } } catch (Exception e) { throw new Exception(e.Message); } //TODO: Validate credentials Correctly, this code is only for demo !! }
/// <summary> /// Funcion para crear nuevo grupo de trabajo /// </summary> /// <param name="grupoNombre">Se proporciona el nombre que trendra el grupo de trabajo</param> /// <returns>Retorna un valor de tipo booleano. True para exito en la creacion y False para fallo</returns> public bool InsertarGrupo(string grupoNombre) { //ESTOS PARAMENTROS SON PARA ENVIAR UNA NOTIFICACION DE ESCRITORIO string title = "Company Academy"; string contentString = "El grupo de trabajo " + grupoNombre + " ha sido creado con exito"; //string image = "Resources/checkmark.png"; SQLConexion conn = new SQLConexion(); List <SqlParameter> parametros = new List <SqlParameter>(); try { conn.Conectar(cadenaConexion); parametros.Add(new SqlParameter("@nombre", grupoNombre)); conn.PrepararProcedimiento("sp_insertarGrupo", parametros); conn.EjecutarProcedimiento(); //ToastNotificationManager.CreateToastNotifier().Show(notification); //SE MUESTRA LA NOTIFICACION PREVIAMENTE CREADA return(true); } catch (Exception Ex) { return(false); throw Ex; } finally { conn.Desconectar(); } }
public User Registrar(User user) { SQLConexion _conexion = new SQLConexion(); List <SqlParameter> _Parametros = new List <SqlParameter>(); DataTableReader _dtr = null; try { _conexion.Conectar(System.Configuration.ConfigurationManager.ConnectionStrings["MiBD"].ToString()); _Parametros.Add(new SqlParameter("@Name", user.Name)); _Parametros.Add(new SqlParameter("@LastName", value: user.LastName)); _Parametros.Add(new SqlParameter("@Nick", user.Nick)); _Parametros.Add(new SqlParameter("@Password", user.Password)); _conexion.PrepararProcedimiento("sp_SetUsers", _Parametros); _conexion.EjecutarProcedimiento(); return(user); } catch (Exception msg) { throw new Exception(msg.Message); } finally { _conexion.Desconectar(); _conexion = null; _dtr = null; } }
public IHttpActionResult PutCell(CellPhones cell) { SQLConexion _conexion = new SQLConexion(); List <SqlParameter> _Parametros = new List <SqlParameter>(); DataTableReader _dtr = null; List <CellPhones> _list = new List <CellPhones>(); try { _conexion.Conectar(System.Configuration.ConfigurationManager.ConnectionStrings["MiBD"].ToString()); _Parametros.Add(new SqlParameter("@id", cell.Id)); _Parametros.Add(new SqlParameter("@namephone", cell.Name)); _Parametros.Add(new SqlParameter("@price", cell.Price)); _Parametros.Add(new SqlParameter("@firmware", cell.Firmware)); _Parametros.Add(new SqlParameter("@brand", cell.Brand)); _conexion.PrepararProcedimiento("sp_UpdateCellPhone", _Parametros); _dtr = _conexion.EjecutarTableReader(); _dtr.Close(); } catch (Exception e) { throw new Exception(e.Message); } finally { _conexion.Desconectar(); _conexion = null; _dtr = null; } return(Ok(_list)); }
public User Login(User user) {//oahdpiubpiufpqiuwebcpiuqwbcpiasdbcpuy SQLConexion _conexion = new SQLConexion(); List <SqlParameter> _Parametros = new List <SqlParameter>(); DataTableReader _dtr = null; try { _conexion.Conectar(System.Configuration.ConfigurationManager.ConnectionStrings["MiBD"].ToString()); _Parametros.Add(new SqlParameter("@nick", user.Nick)); _Parametros.Add(new SqlParameter("@pass", user.Password)); _conexion.PrepararProcedimiento("[dbo].[sp_conf]", _Parametros); _dtr = _conexion.EjecutarTableReader(); if (_dtr.HasRows) { _dtr.Read(); User _user = new global::User() { Id = long.Parse(_dtr["Id"].ToString()), Name = _dtr["Nombre"].ToString(), LastName = _dtr["LastName"].ToString(), Nick = user.Nick, Password = user.Password }; _dtr.Close(); HttpContext.Current.Session["Identificador"] = _user.Id; return(_user); } else { throw new Exception("User not found"); } } catch (Exception msg) { throw new Exception(msg.Message); } finally { _conexion.Desconectar(); _conexion = null; _dtr = null; } //Aqui iría la logica a base de datos //if (user.Nick == "andreiarias53" && user.Password == "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855") //{ //Creamos session con el Id del Usuario //} //else }
public List <User> GetUsers(string user) { SQLConexion _conexion = new SQLConexion(); List <SqlParameter> _Parametros = new List <SqlParameter>(); DataTableReader _dtr = null; List <User> _list = new List <User>(); try { //se abre conexion _conexion.Conectar(System.Configuration.ConfigurationManager.ConnectionStrings["MiBD"].ToString()); _Parametros.Add(new SqlParameter("@nick", user.ToString())); _conexion.PrepararProcedimiento("sp_ListUsers", _Parametros); _dtr = _conexion.EjecutarTableReader(); if (_dtr.HasRows) { while (_dtr.Read()) { User _user = new User() { //Se recuperan los valores de acuerdo al alias que se definio en el procedimiento almacenado Id = long.Parse(_dtr["Id"].ToString()), Name = _dtr["Nombre"].ToString(), LastName = _dtr["LastName"].ToString(), Nick = _dtr["Nick"].ToString(), Password = _dtr["Password"].ToString(), Img = _dtr["Img"].ToString() }; _list.Add(_user); //Se agrega elemento 2 //HttpContext.Current.Session["Identificador"] = _user.Id; } //JavaScriptSerializer js = new JavaScriptSerializer(); //Context.Response.Write(js.Serialize(_list)); _dtr.Close(); return(_list); } } catch (Exception ex) { throw new Exception(ex.Message); } finally { _conexion.Desconectar(); _conexion = null; _dtr = null; } return(_list); }
public IHttpActionResult GetId(string fecha) { SQLConexion _conexion = new SQLConexion(); List <SqlParameter> _Parametros = new List <SqlParameter>(); DataTableReader _dtr = null; List <DetalleVenta> _list = new List <DetalleVenta>(); List <ProductoDetalleVentaModel> _dtv = new List <ProductoDetalleVentaModel>(); DetalleVenta detalleVenta = new DetalleVenta(); try { _conexion.Conectar(System.Configuration.ConfigurationManager.ConnectionStrings["MiBD"].ToString()); _Parametros.Add(new SqlParameter("@fecha", fecha)); _conexion.PrepararProcedimiento("sp_GetByDateTime2", _Parametros); _dtr = _conexion.EjecutarTableReader(); if (_dtr.HasRows) { while (_dtr.Read()) { //Se recuperan los valores de acuerdo al alias que se definio en el procedimiento almacenado detalleVenta.IdVenta = Int32.Parse(_dtr["IdVenta"].ToString()); detalleVenta.TotalVenta = Double.Parse(_dtr["TotalCompra"].ToString()); ProductoDetalleVentaModel _producto = new ProductoDetalleVentaModel() { IdProducto = Int32.Parse(_dtr["IdProducto"].ToString()), Nombre = _dtr["Nombre"].ToString(), Cantidad = Int32.Parse(_dtr["Cantidad"].ToString()), Precio = Double.Parse(_dtr["PrecioUnitario"].ToString()) }; _dtv.Add(_producto); detalleVenta.Productos = _dtv; } _dtr.Close(); _list.Add(detalleVenta); return(Ok(_list)); } } catch (Exception e) { throw new Exception(e.Message); } finally { _conexion.Desconectar(); _conexion = null; _dtr = null; } return(Ok(_list)); }
public IHttpActionResult GetId(int id) { SQLConexion _conexion = new SQLConexion(); List <SqlParameter> _Parametros = new List <SqlParameter>(); DataTableReader _dtr = null; List <CellPhones> _list = new List <CellPhones>(); try { _conexion.Conectar(System.Configuration.ConfigurationManager.ConnectionStrings["MiBD"].ToString()); _Parametros.Add(new SqlParameter("@id", id)); _conexion.PrepararProcedimiento("sp_GetById", _Parametros); _dtr = _conexion.EjecutarTableReader(); if (_dtr.HasRows) { while (_dtr.Read()) { CellPhones _cellPhones = new CellPhones() { //Se recuperan los valores de acuerdo al alias que se definio en el procedimiento almacenado Id = Int32.Parse(_dtr["IdCellPhone"].ToString()), Name = _dtr["NamePhone"].ToString(), Firmware = _dtr["Firmware"].ToString(), Price = Double.Parse(_dtr["Price"].ToString()), Brand = _dtr["Brand"].ToString() }; _list.Add(_cellPhones); //Se agrega elemento 2 //HttpContext.Current.Session["Identificador"] = _user.Id; } //JavaScriptSerializer js = new JavaScriptSerializer(); //Context.Response.Write(js.Serialize(_list)); _dtr.Close(); return(Ok(_list)); } } catch (Exception e) { throw new Exception(e.Message); } finally { _conexion.Desconectar(); _conexion = null; _dtr = null; } return(Ok(_list)); }
/// <summary> /// /// </summary> /// <param name="correo"> Se recibe el correo del usuario con el cual se quiere iniciar sesion</param> /// <param name="pass">Se recibe el password previamente encriptado para que no viaje desprotegida. /// Para encriptar password haga uso de la funcion <see cref="EncriptacionSHA256(string)"/></param> /// <example> /// Ejemplo de logeo con cuenta de administrador /// <code> /// LoginUsuario("*****@*****.**", EncriptacionSHA256("ADMIN")) /// </code> /// </example> /// <returns>Retorna un valor de tipo entero. 0 para no encontrado, 1 para administrador y 2 para usuario normal</returns> public Tuple <int, int, int> LoginUsuario(string correo, string pass) { SQLConexion conn = new SQLConexion(); List <SqlParameter> parametros = new List <SqlParameter>(); DataTableReader reader; try { conn.Conectar(cadenaConexion); parametros.Add(new SqlParameter("@correo", correo)); parametros.Add(new SqlParameter("@contrasenia", pass)); conn.PrepararProcedimiento("sp_Login", parametros); reader = conn.EjecutarTableReader(); if (reader.HasRows) { Usuario usuarioReturn = new Usuario(); while (reader.Read()) { usuarioReturn.IdUsuario = (int)reader["IdUsuario"]; usuarioReturn.IdGrupo = (int)reader["IdGrupo"]; usuarioReturn.Tipo = (int)reader["Tipo"]; usuarioReturn.Nombre = (string)reader["Nombre"]; usuarioReturn.Apellido = (string)reader["Apellido"]; usuarioReturn.Correo = (string)reader["Correo"]; usuarioReturn.Contrasenia = (string)reader["Contrasenia"]; } return(new Tuple <int, int, int>(usuarioReturn.IdUsuario, usuarioReturn.Tipo, usuarioReturn.IdGrupo));//usuarioReturn.Tipo; //EL TIPO 1 ES ADMINISTRADOR Y EL TIPO 2 EL EMPLEADO } else { return(null); //EL CERO SIMBOLIZA UN USUARIO INEXISTENTE } } catch (Exception Ex) { return(null); throw Ex; } finally { conn.Desconectar(); } }
public IHttpActionResult GetId(int id) { SQLConexion _conexion = new SQLConexion(); List <SqlParameter> _Parametros = new List <SqlParameter>(); DataTableReader _dtr = null; List <ProductoModel> _list = new List <ProductoModel>(); try { _conexion.Conectar(System.Configuration.ConfigurationManager.ConnectionStrings["MiBD"].ToString()); _Parametros.Add(new SqlParameter("@id", id)); _conexion.PrepararProcedimiento("sp_GetProductById", _Parametros); _dtr = _conexion.EjecutarTableReader(); if (_dtr.HasRows) { while (_dtr.Read()) { ProductoModel _producto = new ProductoModel() { //Se recuperan los valores de acuerdo al alias que se definio en el procedimiento almacenado IdProducto = Int32.Parse(_dtr["IdProducto"].ToString()), Nombre = _dtr["Nombre"].ToString(), Precio = Double.Parse(_dtr["Precio"].ToString()) }; _list.Add(_producto); } _dtr.Close(); return(Ok(_list)); } } catch (Exception e) { throw new Exception(e.Message); } finally { _conexion.Desconectar(); _conexion = null; _dtr = null; } return(Ok(_list)); }
public IHttpActionResult post(List <ProductoDetalleVentaModel> Lista) { List <SqlParameter> _Parametros = new List <SqlParameter>(); SQLConexion conn = new SQLConexion(); var dt = new DataTable(); dt.Columns.Add("IdProducto", typeof(Int32)); dt.Columns.Add("Cantidad", typeof(Int32)); //DataRow dc = dt.NewRow(); try { for (int i = 0; i < Lista.Count; i++) { DataRow dc = dt.NewRow(); dc[0] = Lista[i].IdProducto; dc[1] = Lista[i].Cantidad; dt.Rows.Add(dc); } conn.Conectar(System.Configuration.ConfigurationManager.ConnectionStrings["MiBD"].ToString()); _Parametros.Add(new SqlParameter("@detalle", dt)); _Parametros[0].SqlDbType = SqlDbType.Structured; _Parametros[0].TypeName = "dbo.Detalle"; conn.PrepararProcedimiento("sp_Insert", _Parametros); conn.EjecutarTableReader(); } catch (Exception e) { throw new Exception(e.Message); } finally { conn.Desconectar(); conn = null; } return(Ok()); }
/// <summary> /// La funcion crea un curso nuevo en la base de datos y agrega el curso a los empleados del grupo /// </summary> /// <param name="curso"> Recibe un parametro de tipo curso con todas sus propiedades a excepcion del idCurso para poder crear el curso exitosamente</param> /// <param name="IdGrupo">Este parametro es de tipo entero y se usa para saber a que grupo esta dirigido el curso. Tiene que ser un grupo existente /// Se puede hacer uso de <see cref="GrupoController.TraerGrupos"/> para verificar los grupos existentes</param> /// <example> /// <code> /// Curso cursito = new Curso() /// { /// Nombre = "Curso c#", /// UrlDescarga = curso.UploadCourse(), // PARA ELEGIR LO QUE QUIERE SUBIR EL USUARIO /// Vigencia = new DateTime(2019, 06, 20, 10, 39, 30) // ANIO, MES, DIA, HORA, MINUTOS, SEGUNDOS /// }; /// curso.CrearCurso(cursito, 1); /// </code> /// </example> /// <returns>Retorna un valor booleano. True para exito en la creacion. False para fallo en la creacion</returns> public bool CrearCurso(Curso curso, int IdGrupo) { SQLConexion conn = new SQLConexion(); List <SqlParameter> parametros = new List <SqlParameter>(); try { conn.Conectar(cadenaConexion); parametros.Add(new SqlParameter("@nombre", curso.Nombre)); parametros.Add(new SqlParameter("@urlDescarga", curso.UrlDescarga)); parametros.Add(new SqlParameter("@vigencia", curso.Vigencia)); parametros.Add(new SqlParameter("@idGrupo", IdGrupo)); conn.PrepararProcedimiento("sp_CrearCurso", parametros); conn.EjecutarProcedimiento(); List <Usuario> usuarios = new List <Usuario>(); string query = "SELECT * FROM Usuario WHERE IdGrupo =" + IdGrupo + ";"; SqlConnection conexionQuery = new SqlConnection(cadenaConexion); conexionQuery.Open(); SqlCommand cmd = new SqlCommand(query, conexionQuery); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { Usuario usuario = new Usuario(); usuario.IdUsuario = (int)dr["IdUsuario"]; usuario.IdGrupo = (int)dr["IdGrupo"]; usuarios.Add(usuario); } conexionQuery.Close(); query = "SELECT * FROM Curso WHERE Nombre =" + "'" + curso.Nombre + "'" + " AND UrlDescarga = " + "'" + curso.UrlDescarga + "'" + ";"; conexionQuery.Open(); SqlCommand comandCurso = new SqlCommand(query, conexionQuery); SqlDataReader drCurso = comandCurso.ExecuteReader(); int idCursoCreado = 0; while (drCurso.Read()) { idCursoCreado = (int)drCurso["IdCurso"]; } conexionQuery.Close(); for (int i = 0; i < usuarios.Count; i++) { List <SqlParameter> parametrosCursoEmpleado = new List <SqlParameter>(); parametrosCursoEmpleado.Add(new SqlParameter("@idUsuario", usuarios[i].IdUsuario)); parametrosCursoEmpleado.Add(new SqlParameter("@idCurso", idCursoCreado)); conn.PrepararProcedimiento("sp_InsertarCursoEmpleado", parametrosCursoEmpleado); conn.EjecutarProcedimiento(); } return(true); } catch (Exception Ex) { return(false); throw Ex; } finally { conn.Desconectar(); } }