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:
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 unDictionary<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 campoidField
coincide conidValue
.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#)
Ayuda
Para obtener ayuda y discutir sobre la librería, únete a nuestra comunidad en Discord.
El código fuente, ejemplos adicionales y las últimas actualizaciones están disponibles en nuestro repositorio oficial de GitHub: Dinaup.Database.