Dinaup.Database

Dinaup.Database es una librería .NET (compatible con .NET Framework y .NET Core) que proporciona una interfaz simplificada para trabajar con PostgreSQL. Sus objetivos principales son:

  • Facilitar la conexión a bases de datos PostgreSQL, soportando SSL y cadenas de conexión en formatos estándar.

  • Realizar lecturas sencillas de datos (listas, diccionarios, modelos) sin tener que lidiar directamente con DataReaders.

  • Ofrecer métodos de inserción, actualización y "upsert" (inserción o actualización según la existencia de registros).

  • Soportar la lectura por lotes de grandes cantidades de datos.

  • Integrarse con clases modelo a través de interfaces simples para mapear resultados a objetos de negocio.

  • Segura Multithreading.

  • Reutilización de conexión.

Instalación

Desde NuGet:

dotnet add package Dinaup.Database

Github Dinaup.Database.

Clase Principal: PGClient

La clase PGClient proporciona métodos para:

  • Conexión y reconexión a PostgreSQL (con SSL si se requiere).

  • Ejecución de sentencias SQL.

  • Lectura de resultados (listas, diccionarios, modelos).

  • Inserción, actualización, y operaciones de upsert.

  • Lectura de datos en lotes.

Propiedades Principales

  • IsConnected (bool): Indica si la conexión está abierta.

  • Host, Port, UserName, Password, DatabaseName: Parámetros de conexión.

  • UseSSL: Indica si se usa SSL.

  • Description: Descripción opcional de la conexión.

  • TablesAndColumns: Diccionario opcional de tablas a columnas.

Establecer Conexión

Conexión con parámetros separados:

Con SSL (cadena estilo URL):

Con SSL (parámetros separados):

Lectura de Datos

  • ReadValue(string SQL): Retorna un único valor (cadena).

  • ReadList(string SQL): Retorna una lista de cadenas (asumiendo una sola columna).

  • ReadDictionary(string SQL): Retorna un Dictionary<string, string> a partir de pares clave-valor.

  • ReadDictionaryList(string SQL): Retorna una lista de diccionarios (una fila por diccionario).

  • ReadObjectList<T>(string SQL) (donde T: BaseModelConverter): Retorna una lista de objetos T mapeados desde la BD.

Ejemplos:

Lectura de Modelos

Si se dispone de clases que heredan de BaseModelConverter, puede mapearse directamente:

Inserción, Actualización y Upsert

  • InsertRecord(tableName, record): Inserta un diccionario como registro.

  • InsertRecords(tableName, records): Inserta múltiples registros a la vez.

  • UpdateRecord(tableName, dataDict, idField, idValue): Actualiza el registro cuyo campo idField coincide con idValue.

  • InsertOrIgnoreRecord(tableName, dataDict): Inserta el registro si no hay conflicto.

  • InsertOrUpdateRecord(tableName, dataDict, idField): Inserta o actualiza según exista el registro.

  • InsertOrUpdateRecords(tableName, dataDicts, idField): Inserta o actualiza múltiples registros.

Ejemplo: Insertar un registro

Ejemplo: Actualizar un registro

Ejemplo: Upsert (insertar o actualizar)

Lectura en Lotes (Batch Reading)

Para grandes cantidades de datos:

  • BatchReadDictionaries(description, countSQL, dataSQL, batchSize): Iterador que produce lotes de diccionarios.

  • BatchReadObjects<T>(description, countSQL, dataSQL, batchSize): Igual que el anterior pero para objetos de tipo T.

Ejemplo:

Clonar Conexiones

DuplicateConnection() crea una nueva instancia PGClient con la misma configuración y abre la conexión.

Manejo de Errores

Se pueden capturar excepciones con try...catch.

Liberación de Recursos

PGClient implementa IDisposable, por lo que es recomendable usar using:

Ejemplos Completos

Ejemplo 1: Leer todos los registros (c#)

Ejemplo 2: Insertar y luego leer modelos (c#)

Ejemplo 3: Actualizar o Ignorar si existe (c#)

Última actualización