Un blog con consejos y sugerencias sobre programación en Csharp que he aprendido a lo largo de los años

miércoles, 18 de mayo de 2022

¿Cómo saber si un número es múltiplo de otro?

mayo 18, 2022 Posted by Uriel Martínez No comments

 

¿Cómo  saber si un número es múltiplo de otro?


Colocaré esto porque aunque es muy sencillo, hay veces que se nos olvidan las funciones básicas al desarrollar.
Recordemos que la solución más simple a veces resuelve el problema, no hay necesidad de rompernos la cabeza

Esta pequeña función la podemos colocar en nuestro módulo de funciones de ayuda para saber si el primer número puede ser múltiplo de otro


multiple number of another number


Si saben alguna otra forma más fácil de hacerlo, comenten!!!

miércoles, 13 de abril de 2022

Paginación desde WebApi

abril 13, 2022 Posted by Uriel Martínez , No comments

 Paginación desde WebApi

A veces cuando realizas un reporte, la información  solicitada  es  tan  grande  que cuesta  mucho trabajarla desde el Front; es decir, desde el explorador, imagínate un reporte de 1000 registros, la webapi la obtiene de la base en cuestión de segundos y la entrega en un formato JSON al front. Ninguna novedad cierto?.
Del lado front web, se recibe el JSON y se pagina en tiempo de ejecución; digamos que para este ejemplo, que sean 100 páginas de 10 registro por cada una. El tiempo que tarda es de 10 segundos de toda la operación.

Bien  y ahora si el reporte es de 800 mil registros? El tema cambia EXPONENCIALMENTE,  un JSON tan grande pudiera ser un problema en todo el flujo y si no se desborda, el trabajo y esfuerzo que deberá llevar el explorador será tanto que  simplemente  se podría vencen el timeout, "pasmar" el explorador o que el usuario se desespere por no recibir la información.

Para ello vamos a implementar la paginación pero ahora del lado del servidor

Estructura de la paginación

Esta parte es sencilla, necesitamos el número de página a solicitar y el tamaño de la página, podemos  crear una clase o bien en la solicitud GET recibirlos como parámetros;  para este ejemplo, será en el GET


Una vez que tengamos los parámetros el proceso de obtención de información es cosa de cada quien, lo importante será al entregarla:


Creamos nuestra función ObtenerPaginacion


Vamos a explicarla, primero obtenemos el total de todas las páginas con una  operación   matemática basándonos entre el total de registros a entregar
Una vez que tengamos esa información, entregaremos en el header de la respuesta un objeto que contendrá la información que el front necesitará para interpretar y pintar el resultado

Aquí la magia:

lista.Skip((numPagina - 1) * tamPagina).Take(tamPagina).ToList();

con esta línea vamos a entregar solo la información de la página solicitada y con el tamaño solicitado


Como ven, no es tan complicado una vez que entendemos como funciona al división de páginas

Saludos!!!

lunes, 28 de marzo de 2022

Operaciones en base de datos con NuGet

marzo 28, 2022 Posted by Uriel Martínez No comments

 Operaciones en base de datos con NuGet

Que tal amigos, ya he hecho una entrada donde creamos unas funciones para realizar operaciones en base de datos SQL pero esta ocasión realizaremos una mejora mediante un paquete NuGet (de mi autoría)


Instalación

Vamos a descargar primeramente nuestro paquete, para eso vamos al administrador de paquetes NuGet en nuestro visual studio y buscamos UMB.DataBaseOperations, como se muestra



Una vez instalado seguiremos los siguientes pasos para utilizarlo. Primero creamos nuestra función que realizará la petición y el tratamiento de la respuesta, en este ejemplo digamos que se guardará "algo" en base de datos.  Creamos una instancia hacia nuestro paquete



No pedirá 3 parámetros

1.-el SP que utilizaremos
2.- el listado de parámetros
3.- la cadena de conexión

Para no aburrirlos con detalles que cualquiera pudiera codificar, mejor la función ya avanzada quedaría de la siguiente forma:




Puedes copiar mi código y modificarlo a tu conveniencia pero así de fácil haces una función que realice una operaciones a tu base de datos por medio de un SP y recibir un resultado, preveenir un error y saber el motivo

De la misma forma puedes utilizar el método QueryExecution para realizar una consulta directa aunque no lo recomiendo, pero siempre es una opción y el código queda prácticamente igual


Espero sea de ayuda, y recuerda que si tienes duda, trataré de ayudarte en los comentarios

Saludos

viernes, 25 de marzo de 2022

Envío de correo con NuGet

marzo 25, 2022 Posted by Uriel Martínez No comments

 Envío de correo con NuGet


Hoy vamos a ver algo que ya es muy común, el envío de correo mediante código de CSharp pero esta vez no lo haremos de la forma convencional, larga y aburrida. Para nuestro ejemplo utilizaremos un paquete NuGet.

Instalación del paquete NuGet

En nuestro Visual Studio, abrimos el administrador de paquete NuGet y buscamos el paquete llamado UMB.SendMail (es de mi autoría)


Les debe aparecer 2 versiones, una que está es obsoleta y la más actual con el framework Net 4.8 instalamos esta última; la que tiene

Deberá aparecer el espacio de nombres  en  nuestra sección de  referencias de esta manera:


Configuración

Ya tenemos todo lo necesario para poder enviar un correo, solo hay que configurar los parámetros de destino y SMTP. Para ello necesitamos una instancia de:



Después cargaremos toda nuestra información, en lo personal siempre hago una función que sea la encargada de esta tarea, así podremos darle mejor mantenimiento.


Obviamente es un ejemplo de una función que puedes tomar como base pero también mejórala a tu gusto, la meta es llenar nuestro mailConfig con los parámetros requeridos.

Regresamos a nuestro código y mira, es muy sencillo:

En 5  minutos haz  implementado el envío de correo que podrá ser utilizado en cualquiera de tus proyectos como una función encapsulada


Espero que haya sido de ayuda y como nota final, este paquete es capaz de recibir un html como cuerpo del mensaje, adjuntar archivos y trabajar con certificado de seguridad.


Si tienes alguna duda, déjame un comentario y con gusto trataré de ayudarte en lo que pueda.


Saludos

martes, 15 de marzo de 2022

Leer y escribir en un archivo de texto

marzo 15, 2022 Posted by Uriel Martínez No comments

 Leer y escribir en  un archivo de texto


Esta entrada la realizo porque tengo personas  a  mi  cargo que aún  no tienen esa  experiencia  leyendo archivos de texto y escribir en ellos, ya sea como bitácora, como resultado de una operación o porque comúnmente un fichero contiene información que debe ser leída  a diario para entregar un reporte.

Bien pues empecemos con realizar una lectura de un archivo. Se van a sorprender pero tanto Net Framework en su versión  4.5 en adelante como   Net Core en su versión  6  tienen  una enorme ayuda con LINQ.


Leer un archivo de texto línea por línea

Para leer un archivo de texto utilizaremos la siguiente instrucción que nos entregará una instancia enumerable

Leer todas las líneas de un  archivo

Dentro sus parámetros indicaremos la ruta de nuestro archivo, que para fines prácticos será en C:/file.txt

pero para ser mucho más practico y tener las líneas del archivo de forma  práctica y eficiente para ser utilizadas más tarde, almacenaremos su resultado en una lista de strings




Ya que tenemos las lineas en una lista se pueden trabajar de la forma que gustes, igual  con LINQ; por ejemplo:


Escribir en  un archivo


Para escribir dentro de  un archivo es un tanto más rudo;  no te creas, es igual de fácil.

Primero lo que debemos saber es que una escritura tardará mucho más que una lectura y lo que no debemos hacer es detener la interacción de nuestro sistema hasta no concluir, por esto, haremos uso de una función asíncrona y nuestro simple confiable LINQ



Sencillo, ¿No?, en versiones anteriores utilizamos la instrucción Using para usar el recurso y luego liberarlo pero con LINQ es cosa del pasado


Espero haya sido de ayuda

Nos vemos en el próximo artículo

martes, 8 de marzo de 2022

Json. ¿Qué es y cómo se utiliza?

marzo 08, 2022 Posted by Uriel Martínez No comments

 Formato Json. ¿Qué es y cómo se utiliza?



Vamos a empezar por saber que  son sus siglas JSON:  JavaScript Object Notation. Pero no es más que un formato que se utiliza para intercambiar información entre sistemas. Los archivos json contienen solo texto y usan la extensión .json.


¿Por qué es tan mencionado?

Básicamente porque el formato JSON es más ligero que el formato XML lo que reduce el tiempo de carga y la complejidad para leer una respuesta


¿Dónde se usa?

Json es el formato que más se está adoptando dado que es muy liviano trabajar con él cuando se trata de peticiones asíncronas o comúnmente  AJAX (JavaScript asíncrono) y como más sitios web utilizan las librerías y lenguaje Javascript por esta razón JSON  se ha vuelto tan popular.

 

¿Cuál es la estructura de un objeto JSON?

Hay dos conceptos que debes saber como regla para definir cualquier variable en un formato JSON, la clave (key) y su valor (value)

Las Keys deben ser cadenas de caracteres (strings) y por consiguiente deben estar entre comillas y los valores que puede tener son de un arreglo (array), objeto, cadena (string), booleano, número o hasta un nulo.

Tranquilo, vamos a ver con ejemplos  lo anterior pero antes no debes olvidar que un objeto JSON comienza y termina con llaves {}. Puede tener dos o más pares de claves/valor dentro, con una coma para separarlos. Así mismo, cada key es seguida por dos puntos para distinguirla del valor.


Tipos  de valores en un objeto JSON

Veamos  primero lo básico

Strings. Cadenas de caracteres, es decir, un valor alfanumérico;  ejemplo

"Nombre":"Uriel"

Número. Como su nombre lo indica serán valores enteros o flotantes; ejemplo:

"Edad":37

Booleano. Aquí no hay más, solo es true (verdadero) o false (falso);  ejemplo:

"Soltero": "true"

Nulo. Sencillo, valor null;  ejemplo:

"Calle":"null"

Objeto:  

Un objeto lo podemos entender como una instancia de clase donde podemos tener tantas key/values que queramos separados por comas:

Objeto Json


Arreglos

por último los arreglos que no es más que una colección de valores dentro de corchetes [] que se pueden anidar; es decir, que  podrán almacenar  más valores dentro que deben cumplir con key/value;  ejemplo:

Array sencillo

Array simple Json


Arreglo complejo

Aquí podemos   hacer un sin fin de ejemplos pero para entender el tema  lo expondré así:

Array complejo Json


Cómo se aprecia, podemos tener un "árbol" con un número de keys/values que queramos, esto será muy útil en la comunicación entre un API y un sitio web; por ejemplificar, pero como recomendación, entre más sencillo sea un JSON es un señal que el sistema está mejor construido


Espero que les haya servido, cualquier duda trataré de responderla en los comentarios.

Saludos!!!!


martes, 1 de marzo de 2022

Versionamiento NET vs Core

marzo 01, 2022 Posted by Uriel Martínez , , No comments

 Versionamiento NET vs  Core

Hoy por hoy estamos conviviendo entre 2 tecnologías, el monstruo Framework NET y el cada vez más presente NET Core.

Para ambas el versionamiento;  no hablo de tener un repositorio e ir subiendo tus cambios, eso es más que obligado, te estoy hablando de la forma en la que un EXE, Dll, Servicio Web, Etc, tenga su número de versión en producción y su formato

De lo que te estoy hablando es cuando un archivo en sus propiedades tiene el número de versión, así como se muestra a continuación



Es muy necesario conocer su descripción para llevar una buena identificación de tu producto

Formato básico

El formato más básico es el siguiente

Compilado . Corrección o Ajuste . Revisión

Y significan lo siguiente:

Compilado.- Es la versión de tu compilado cuando ya ha sido aprobado y es la más importante, deberá incrementar siempre y cuando exista un modulo nuevo, un cambio que afecte a su estructura o flujo principal

Corrección o ajuste.- Generalmente se incrementa cuando existe una solución a un error y que no haya existido la necesidad de algún modulo nuevo o la modificación al flujo o estructura

Revisión.- Se refiere a que se detectó alguna mejora, algún agregado o adecuación menos significativa;  un ejemplo, colocar una nueva línea que escriba en el LOG de tu sistema, cuando inicien sesión

Existe un formato más amplio que se maneja muy a menudo en .NET

Versión principal. Versión secundaria . Número de compilación . Revisión

Que no es más que lo mismo pero con un nivel  más que es el numero final de compilación para  dar seguimiento;  en  lo personal,  me gusta  más el básico

Versión en proyecto .NET


En .NET ha sido muy fácil realizar este control debido a un archivo que viene incluido en cualquier proyecto con visual studio, me refiero a AssemblyInfo ya sea que utilicen C sharp o Visual Basic, lo podrás encontrar dentro de la carpeta Properties de tu proyecto.

Dentro de este archivo podrás encontrar las siguientes propiedades

assembly: AssemblyTitle("")] -> El titulo de tu componente  (archivo)
[assembly: AssemblyDescription("")] -> Una descripción breve  de lo que hace
[assembly: AssemblyCompany("")]   ->el nombre de tu empresa  o tu nombre  profesional
[assembly: AssemblyProduct("")] -> El nombre de tu producto
[assembly: AssemblyTrademark("")] ->  Iniciales de tu marca

y una guía de como será su versionamiento en las propiedades

[assembly: AssemblyVersion("1.0.0.0")] -> la versión de tu ensamblado o compilado
[assembly: AssemblyFileVersion("1.0.0.0")] -> La versión de tu archivo

Nota: algo importante es que en este archivo podemos dejar comentarios sobre cada liberación al final, les recomiendo mucho esta practica para saber qué se está liberando en cada ocasión, un buen ejemplo sería

//Autor         Fecha         Versión     Descripción
//@UMB      26/02/21    1.0.0.0     Se Inicia el proyecto integrando las capas necesarias


Versión en proyecto .NET Core


Aquí es muy distinto dado que desaparecen muchos archivos para optimizar el peso y velocidad, por lo que debemos hacer nuestro control internamente. Aclaro, microsoft menciona que para eso existe la librería descargable por NuGet de nombre Microsoft.AspNetCore.Mvc.Versioning pero aquí muestro la forma que para mi es más sencilla, consistente y que me ha funcionado por años

Consiste en abrir las propiedades del proyecto



En la sección de paquete tendremos lo necesario para realizar nuestro control de versiones con las propiedades por defecto o bien colocamos lo que  deseamos

Edición del archivo del proyecto

De la misma  forma existe una alternativa para quienes desean llevar un control más exhaustivo, se trata de editar el archivo  .csproj. Cabe mencionar que la sección a continuación es de donde proviene la información de la imagen anterior

<PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net6.0-windows</TargetFramework>
    <Nullable>enable</Nullable>
    <UseWindowsForms>true</UseWindowsForms>
    <ImplicitUsings>enable</ImplicitUsings>
    <PackageReleaseNotes></PackageReleaseNotes>
    <Company>UMB</Company> 
    <Version>2.1.0</Version>
    <Description>alguna descripcion</Description>
    <Copyright>UMB</Copyright>
    <AssemblyVersion>1.0.0</AssemblyVersion>
    <FileVersion>1.0.0</FileVersion>  
  </PropertyGroup>

Como podrás apreciar es un tanto distinto pero no deja de ser sencillo cuando sabemos organizarnos.


Espero esto te haya sido de ayuda, nos vemos en el siguiente POST

Saludos