Saltar al pie de página
Iron Academy Logo
Aplicación C#
Aplicación C#

Otras categorías

Un Análisis en Profundidad de la Conexión de Texto en C#

Tim Corey
1h 15m 23s

En la Lección 11 de la serie "C# App Start to Finish" de Tim Corey, Tim explica cómo guardar datos en archivos de texto usando una conexión de datos basada en texto. Tim comienza recordando a los espectadores que, en la lección anterior, configuraron la conexión SQL y realizaron tareas clave de mantenimiento. Ahora, el enfoque se traslada a la Conexión de Texto, y el objetivo es claro: hacer que la conexión de texto funcione de la misma manera que la conexión SQL, donde el sistema puede tomar un PrizeModel y devolverlo con su ID correctamente lleno. Tim enfatiza que el video mostrará un flujo de trabajo completo para almacenar, leer y actualizar datos usando archivos de texto plano.

La solución — Configurando la conexión de texto

Tim comienza abriendo el Conector de Texto dentro de la carpeta DataAccess. Él elimina el código de muestra y comienza desde cero. Explica que, a diferencia de SQL, los archivos de texto no proporcionan características inteligentes de base de datos como la autoincrementación de IDs. Entonces, la primera tarea es decidir dónde almacenar los archivos de texto.

Tim propone un diseño limpio: almacenar cada modelo en su propio archivo de texto. Por ejemplo, PrizeModel tendrá su propio archivo llamado PrizeModels.csv, mientras que otros modelos como MatchupModel tendrán archivos separados. Tim compara esta estructura con las tablas SQL: cada archivo se convierte en una "tabla" que contiene una lista de ese modelo. Esto hace que los datos sean fáciles de gestionar y previene mezclar diferentes tipos de modelos juntos.

La cadena de conexión — Almacenando la ruta del archivo

Tim explica que en lugar de almacenar un solo nombre de archivo, se almacena una ruta a la carpeta donde se guardarán todos los archivos. Esta ruta se coloca en el app.config bajo appSettings. Tim agrega un nuevo par clave-valor:

  • Clave: filePath

  • Valor: la ruta de la carpeta donde se almacenarán los archivos

Él enfatiza usar la sintaxis correcta de Windows y evita terminar la ruta con una barra, ya que prefiere agregarla solo al construir la ruta del archivo completa. Esta configuración es crucial porque hace que la aplicación sea flexible: si la ubicación de almacenamiento cambia, solo actualizas el app.config.

El plan — Cómo funciona la conexión de texto

Tim describe un plan claro para guardar un premio:

  1. Cargar el archivo de texto que contiene todos los premios.

  2. Convertir las líneas de texto en una lista de PrizeModel.

  3. Encontrar el ID más alto en la lista y establecer el nuevo ID = ID más alto + 1.

  4. Agregar el nuevo modelo de premio a la lista.

  5. Convertir la lista de premios de nuevo en líneas de texto.

  6. Guardar la lista de nuevo en el archivo de texto, sobrescribiendo los datos antiguos.

Tim explica que los archivos de texto son "estúpidos" en comparación con las bases de datos SQL. SQL puede gestionar IDs automáticamente, pero los archivos de texto requieren que el desarrollador implemente la lógica manualmente. Es por eso que Tim descompone el proceso en métodos más pequeños para mantener el código limpio y reutilizable.

Creando una nueva clase — Procesador de Conector de Texto

Tim crea una nueva clase llamada TextConnectorProcessor. La coloca dentro de la carpeta DataAccess pero en un namespace diferente para evitar saturar el namespace principal. Tim explica que los namespaces son flexibles y se pueden personalizar, pero recomienda mantenerlos simples y limpios.

Hace que la clase sea public static y comienza a construir métodos auxiliares.

Método de extensión — Ruta completa del archivo

Tim crea un método de extensión:

public static string FullFilePath(this string fileName)

Este método combina el filePath de app.config con el nombre del archivo para generar la ruta completa del archivo. Tim demuestra cómo usar ConfigurationManager.AppSettings["filePath"] y explica la necesidad de escapar las barras diagonales en cadenas C# (usando \).

Luego convierte el método en un método de extensión para que pueda usarse así:

"PrizeModels.csv".FullFilePath()

Tim explica que este método de extensión solo es necesario en el conector de texto, por lo que lo mantiene en un namespace separado para evitar mostrarlo en toda la solución.

Método Cargar Archivo — Lectura de Datos de Texto

Luego, Tim crea otro método de extensión:

public static List<string> LoadFile(this string file)

Este método verifica si el archivo existe usando File.Exists(). Si el archivo no existe, devuelve una lista vacía. Si existe, lee todas las líneas usando File.ReadAllLines() y las convierte en una lista.

Tim destaca la importancia de manejar adecuadamente los archivos faltantes, ya que esto es común en la primera ejecución de la aplicación.

Convertir Texto a Modelos de Premio

Tim crea un método para convertir las líneas de texto cargadas en una lista de PrizeModel:

public static List<PrizeModel> ConvertToPrizeModels(this List<string> lines)

Él explica el uso de valores separados por comas (CSV) donde cada línea contiene campos separados por comas. Tim divide cada línea en columnas y las analiza en los tipos de datos apropiados:

  • ID → int.Parse()

  • PlaceNumber → int.Parse()

  • PlaceName → string

  • PrizeAmount → decimal.Parse()

  • PrizePercentage → double.Parse()

Tim también explica que intencionalmente permite que la aplicación se bloquee si los datos son inválidos. Esto ayuda a revelar problemas temprano en lugar de continuar con datos corruptos.

Encontrar el ID Máximo

Tim regresa al TextConnector y explica cómo encontrar el ID más alto:

int currentID = prizes.OrderByDescending(x => x.ID).First().ID + 1;

Él señala que esto se bloqueará si el archivo está vacío, por lo que agrega una verificación:

if(prizes.Count > 0)
{
    currentID = prizes.OrderByDescending(x => x.ID).First().ID + 1;
}

Esto asegura que el primer registro obtenga un ID de 1.

Agregar Modelo y Guardar

Tim agrega el nuevo premio a la lista y luego convierte la lista de nuevo en líneas de texto:

public static void SaveToPrizeFile(this List<PrizeModel> models, string fileName)

Él usa interpolación de cadenas para crear cada línea CSV y la añade a una lista de cadenas. Finalmente, usa:

File.WriteAllLines(fileName.FullFilePath(), lines);

Tim explica que WriteAllLines sobrescribe el archivo, lo cual es un comportamiento deseado porque actualiza los datos con contenido nuevo.

Devolviendo el Modelo

Tim concluye el método devolviendo el PrizeModel con el ID asignado. Esto hace que el nuevo premio sea utilizable en el resto de la aplicación, al igual que SQL.

Probando la Conexión de Texto

Tim cambia a Program.cs y cambia la conexión de datos de SQL a Texto. Cuando ejecuta la aplicación y crea premios, el sistema inicialmente se bloquea debido a registros faltantes. Tim rápidamente corrige el error con la verificación if(prizes.Count > 0), luego vuelve a ejecutar.

Él demuestra que los datos se guardan correctamente en el archivo PrizeModels.csv y muestra cómo el archivo puede abrirse en el Bloc de notas o Excel.

Reflexiones Finales — Métodos de Extensión y Espacios de Nombres

Tim termina la lección recordando a los espectadores que los métodos de extensión solo aparecen cuando se incluye el espacio de nombres correcto. Esto evita desorden y posibles conflictos de nombres. Él señala que estas dos lecciones crean una base sólida para el resto de la aplicación y preparan el escenario para futuros desarrollos.

Hero Worlddot related to Un Análisis en Profundidad de la Conexión de Texto en C#
Hero Affiliate related to Un Análisis en Profundidad de la Conexión de Texto en C#

Gana más compartiendo lo que te gusta

¿Creas contenidos para desarrolladores que trabajan con .NET, C#, Java, Python o Node.js? ¡Convierte tu experiencia en un ingreso extra!

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame