jueves, 14 de septiembre de 2023

API REST en Visual Studio 2022

 Aún para personas profesionales en las Tecnologías de la Información puede confundir y quizás hasta desconocer el término de API REST. Con un profundo respeto les comparto un video que a mi me sirvió mucho de referencia e introducción a este tema a pesar del nombre del video. 


 En las aulas utilizamos PHP con MariaDB, inclusive en mi canal hay algunos vídeos al respecto, Sin embargo ahora vamos a trabajar con la tecnología .NET y para ello nos encontramos un artículo en el siguiente blog.

Es interesante porque esta escrito en el pasado mes de mayo de este año con lo que ya se aborda la versión 2022 de Visual Studio.

Para darle un sabor diferente vamos a cambiar de ejemplo y podemos trabajar con una pequeña base de datos que contiene los datos generales de mis compañeros de trabajo. Entonces la base de datos estaría compuesta por:

idemp
nombre
apellido1
apellido2
diac
mesc

DataTable FrameWork 7 de .NET

Introducción.

 "Representa una tabla de datos en memoria" (Microsoft, 2023). Así es como se define en la referencia de Microsoft en línea, para los clásicos aquellos “cursores” de Microsoft FoxPro que, a diferencia de éstos, en .NET se cuenta con varios métodos y propiedades además que es homogéneo a la plataforma de desarrollo independientemente del motor de donde provenga la tabla.

A continuación, se muestra algunas operaciones con DataTable en Visual Studio 2022 usando el lenguaje de programación de C#.

 Crear el DataTable

          DataTable dt = null;

            string comando = "select * from tdbf";

            cadenaConexion = "Provider=vfpoledb;Data Source=rutadbf;Collating Sequence=machine";

            OleDbConnection cnn = new OleDbConnection(cadenaConexion);

            try

            {

                cnn.Open();

                OleDbCommand cmd = new OleDbCommand(comando, cnn);

                OleDbDataAdapter da = new OleDbDataAdapter();

                da.SelectCommand = cmd;

                dt = new DataTable();

                dt.Locale = System.Globalization.CultureInfo.InvariantCulture;

                try

                {

                    da.Fill(dt);

                }

                catch (Exception ex)

                {

                    Console.WriteLine(ex.Message);

                }

            }

            catch (Exception)

            {

 

                throw;

            }

 

En este código podemos ver como una tabla de un software que se quedó en su versión de 32 bits como lo es MS FoxPro gracias a las librerías de .NET lo puede leer primero utilizando un OleDbAdapter (objeto da) y a través de un comando select, utilizando el método Fill() es como poblamos el DataTable con todo el contenido de la tabla tdbf. Comentaré la analogía que normalmente hacía a mis alumnos cuando explicaba del adaptador y que acababa de vivir al encargar un teléfono móvil que me llegó con un cargador para Europa o Asia y entonces tuve que comprar un “adaptador” para nuestras tomas de corriente de 120v de América, así mismo la tabla puede venir de MS FoxPro, de Oracle, de Microsoft SQL Server, SQLite, etc. Para que al final quede en un objeto de .NET el cual inclusive puede ser modificable e impactar a la estructura origen que no es tema de este artículo.

Leer el nombre de las columnas de un DataTable

            string[] aNamesCols = new string[dt.Columns.Count];

            for (int i = 0; i < dt.Columns.Count; i++)

            {

                aNamesCols = dt.Columns[i].ColumnName;

            }

En el ejemplo anterior vamos a crear un arreglo de cadenas (strings) que contiene el nombre de las columnas del DataTable que se acaba de crear en el primer ejemplo de código gracias a las propiedades Count y ColumnName de las columnas (Columns) del DataTable.

Recuperar los valores de las columnas de un DataTable

               

                   int cols = torigen.Columns.Count;

 

  foreach (DataRow row in torigen.Rows)

                  {

                    for (int i = 0; i < cols; i++)

                    {

                        if (row[i].GetType() == typeof(string))

                        {

                            InsCmd = InsCmd + "'" + row[i] + "',";

                        }

                        else

                        {

                            InsCmd = InsCmd + row[i] + ",";

                        }

                    }

 

Si queremos obtener los valores de una columna (campo en el argot de los lenguajes XBase) podemos realizar el código mostrado arriba donde para empezar solicitamos el número de columnas, luego recorremos la colección de Rows (registros o tuplas en el lenguaje formal de las bases de datos) y de cada objeto Row (row) accesamos a él, por medio de su índice (segundo ciclo que recorre las columnas de la tupla).

Un extra a este código de ejemplo es la condición row[i].GetType() == typeof(string) donde de manera intuitiva (o diciendo coloquialmente “le dimos como el burro que toco la flauta”) el compañero Paco Díaz y un servidor programamos para saber si el dato extraído era de cadena (string) u otro tipo de dato ya que se estaba construyendo una instrucción insert de SQL.

Hasta aquí el contenido del post y seguimos escribiendo hallazgos en el vasto mundo que ahora cuenta con un colaborador más eficaz como lo son las plataformas de inteligencia artificial.

Bibliografía

Microsoft. (14 de septiembre de 2023). Microsoft Learn. Obtenido de Referencia de .NET 7: https://learn.microsoft.com/es-es/dotnet/api/system.data.datatable?view=net-7.0

jueves, 7 de septiembre de 2023

Configuración de Visual Studio 2022 para el IIS para WebApps de 32 Bits

 Antes de cerrar el día, había quedado pendiente de como es posible así como en el IIS del equipo local, como probar las aplicaciones web puedan desplegarse para apps y dlls de 32 bits en el Visual Studio 2022.

Mostramos aquí la WebApp de juguete en el VS2022.


Ahora vamos a las opciones Herramientas-Opciones y aquí en Proyectos y Soluciones - Proyectos web se desmarca el checkbox de Usar la opción de 64 bits de IIS Express para proyectos y sitios web.

Probamos el ejecutar la aplicación web y observamos que se despliegue el resultado esperado.


Por lo que se puede continuar con el desarrollo web para acceso con tablas de FoxPro.

Miguel Araujo.

Aplicaciones ASP.NET con Visual Studio 2022 - C# usando tablas de FoxPro

En el Instituto donde laboro se tiene un formato que lleva años usando y que parece que ya, al no tener versiones de 64bits y Microsoft concluir su desarrollo, se está cambiando por formatos de texto como el CSV, sin embargo debido a los sistemas heredadas que aun no se aun podido migrar se tiene aun versiones de archivos de lenguajes XBase (DBF).

Se pretende migrar este tipo de formato a CSV para después subir a una base de datos de Oracle. En principio al hacer que los archivos dbf se podían leer desde aplicaciones .NET de consola no se tuvo problema, por lo que, auguramos el éxito de este mismo caso de uso en aplicaciones web.

No fue así, y esto nos costó todo un día de buscar la solución, que hasta ahora solo se ha podido resolver en el Servidor Web (el Internet Information Services) de nuestras máquinas locales, pero es importante también darle salida, en el IIS Express del propio VS2022.

La solución se expresa en texto y en este artículo se detallará un poco más la misma. Como siempre la web te saca de varios apuros sin duda alguna y esta vez la solución vino de <lwp> Comunidad de Programadores.

El error que desplegaba el sitio web era lo siguiente:

Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.


Detalles de la excepción: System.InvalidOperationException: El proveedor 'vfpoledb' no está registrado en el equipo local.

Pues bien, se trato de instalar el OleDb Provider de FoxPro, una solución marcaba que se instalará el Power BI Desktop, el Service Pack de Visual FoxPro, en fin muchas soluciones que al final al leer cuidadosamente dicha página, menciona que la solución aplicaba hasta VS 2019.

Entonces empezamos de cero e hicimos una aplicación web con un botón y una etiqueta, se definió la arquitectura x86 y se agregaron las instrucciones directamente (utilizamos bibliotecas de clases) de OleDb y la estrategia era desplegar esta aplicación ultra sencilla en el IIS local.


Para definir la plataforma a trabajar (equipos de 32 o 64 bits) se elige la opción Proyecto - Propiedades del <AppWeb> donde en la pestaña Compilar en el combo Plataforma destino, se elige x86.

Después de esto procedimos a Publicar esta pequeña aplicación que hacía un comando SELECT COUNT(*) FROM TablaDbf para saber cuantos registros tiene la tabla de FoxPro, el método fue usar el resultado de dicha publicación a una carpeta, misma que sería copiada al wwwroot de nuestra máquina que funge como servidor.

Ahora vamos a nuestra consola del IIS para permitir que se desplieguen aplicaciones de 32 bits como es este caso, ya que es lógico que como mencioné la dll del OleDb (vfpoledb.dll) es una versión de este tipo ya que Microsoft ya no actualizó el producto a 64bits.
Elegimos primero en el panel izquierdo Grupo de Aplicaciones, luego DefaultAppPool y por último Configuración avanzada.

Aquí es donde se activa que sea posible la ejecución de aplicaciones de 32 bits.


Por seguridad al copiar la aplicación al directorio por omisión se detenía el servicio del IIS y luego se inicia para probar los cambios.
Para cerrar la pinza ahora se hizo lo mismo pero usando nuestro kit de clases y sigue funcionando. Otra moraleja es que en la desesperación baje la WebApp hasta el FrameWork 2.0 y al querer incorporar las bibliotecas compiladas con Framework 4.8 y marcaba errores en la compilación, se solucionó al dejar la WebApp con 4.8.

Hasta aquí el post de hoy, y pues quizás ayude a otro hermano programador que sufra lo mismo que sufrimos entre ayer y hoy.

Miguel Araujo.



Python y el algebra lineal (2)

 Suma y resta de vectores y multiplicación de un escalar por un  vector Para la suma y resta de vectores los arreglos y/o vectores deben ser...