square-codeDinaup.Database

Dinaup.Database es el módulo de acceso a PostgreSQL incluido dentro del paquete Dinaup. Ofrece una interfaz directa para trabajar con la base de datos sin lidiar con DataReader ni boilerplate de ADO.NET. Cubre:

  • Conexión a PostgreSQL con SSL y cadenas en formato estándar.

  • Lecturas tipadas (listas, diccionarios, modelos) sin lidiar con DataReader.

  • Inserción, actualización y upsert (insertar o actualizar según exista el registro).

  • Lectura por lotes de grandes volúmenes de datos.

  • Mapeo automático a clases de negocio mediante interfaces simples.

  • Acceso multihilo seguro y reutilización de conexión.

Instalación

Dinaup.Database forma parte del paquete principal de Dinaup. Ya no se distribuye como paquete independiente: instalando Dinaup ya tienes PGClient y todas las utilidades de base de datos disponibles.

dotnet add package Dinaup
using Dinaup.Database;
circle-info

En versiones anteriores Dinaup.Database era un NuGet aparte (dotnet add package Dinaup.Database). Si actualizas un proyecto antiguo, basta con eliminar esa referencia: el namespace y la API son los mismos.

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