Quantum.Data.SqlBuilder 1.0.2

dotnet add package Quantum.Data.SqlBuilder --version 1.0.2
                    
NuGet\Install-Package Quantum.Data.SqlBuilder -Version 1.0.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Quantum.Data.SqlBuilder" Version="1.0.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Quantum.Data.SqlBuilder" Version="1.0.2" />
                    
Directory.Packages.props
<PackageReference Include="Quantum.Data.SqlBuilder" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Quantum.Data.SqlBuilder --version 1.0.2
                    
#r "nuget: Quantum.Data.SqlBuilder, 1.0.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Quantum.Data.SqlBuilder@1.0.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Quantum.Data.SqlBuilder&version=1.0.2
                    
Install as a Cake Addin
#tool nuget:?package=Quantum.Data.SqlBuilder&version=1.0.2
                    
Install as a Cake Tool

Quantum.Data.SqlBuilder

NuGet Version License: MIT

Quantum.Data.SqlBuilder es una librería .NET ligera y potente para construir scripts SQL de forma fluida, segura y dinámica. Su objetivo es simplificar la creación de consultas complejas sin la complejidad de un ORM completo, previniendo ataques de inyección SQL mediante el uso exclusivo de consultas parametrizadas.

✨ Características Principales (v1.0.0)

  • API Fluida e Intuitiva: Encadena métodos para construir consultas SELECT, INSERT, UPDATE, y DELETE.
  • Seguridad por Diseño: Genera siempre consultas parametrizadas para evitar la inyección SQL.
  • Mapeo de DTOs: Utiliza atributos ([ColumnName], [Ignore]) para mapear tus clases a la base de datos de forma sencilla.
  • Soporte Avanzado de Consultas:
    • Cláusulas JOIN (INNER, LEFT, RIGHT).
    • Condiciones complejas con WHERE IN, OR y grupos con paréntesis (AndGroup/OrGroup).
    • Helpers para cláusulas dinámicas (WhereIf).
    • Agregaciones con GROUP BY y HAVING.
  • Paginación Simplificada: Método .Page() para paginación automática con OFFSET/FETCH.
  • Soporte Completo para Stored Procedures:
    • Parámetros nombrados, posicionales y de OUTPUT.
    • Parámetros con Valor de Tabla (TVPs) para inserciones masivas eficientes.
  • Scripts Transaccionales: Genera scripts T-SQL completos y seguros con la clase UnitOfWork, capaz de manejar la captura de IDs y su reutilización en operaciones posteriores.

🚀 Instalación

Instala el paquete a través de la consola del Administrador de Paquetes NuGet:

Install-Package Quantum.Data.SqlBuilder -Version 1.0.0

O mediante la CLI de .NET:

dotnet add package Quantum.Data.SqlBuilder --version 1.0.0

💡 Ejemplos de Uso

Consulta SELECT Avanzada

var builder = new SqlBuilder();
var query = builder
    .Select("u.Nombre, o.Total, o.Fecha")
    .From("Usuarios u")
    .InnerJoin("Ordenes o", "u.IdUsuario = o.IdUsuario")
    .Where("u.Activo", "=", 1)
    .AndGroup(g => g // Agrega un grupo: AND ( ... )
        .Where("o.Total", ">", 50)
        .OrWhere("o.Estado", "=", "Urgente")
    )
    .OrderBy("o.Fecha", descending: true)
    .Page(1, 10) // Página 1, 10 resultados
    .Build();

// `query` contiene el CommandText y los Parameters listos para ejecutar.
// SELECT u.Nombre, o.Total, o.Fecha FROM Usuarios u INNER JOIN Ordenes o ON u.IdUsuario = o.IdUsuario WHERE u.Activo = @p0 AND (o.Total > @p1 OR o.Estado = @p2) ORDER BY o.Fecha DESC OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY

INSERT a partir de un DTO con Atributos

// Define tu DTO
public class ProductoDto
{
    [ColumnName("NombreProducto")]
    public string Nombre { get; set; }
    
    public decimal Precio { get; set; }

    [Ignore] // Esta propiedad será ignorada
    public int CantidadEnCarrito { get; set; }
}

var nuevoProducto = new ProductoDto 
{ 
    Nombre = "Teclado Quantum Pro", 
    Precio = 89.99m, 
    CantidadEnCarrito = 1 
};

var builder = new SqlBuilder();
var command = builder
    .InsertInto("Productos")
    .Values(nuevoProducto)
    .Build();

// SQL Generado:
// INSERT INTO Productos (NombreProducto, Precio) VALUES (@NombreProducto, @Precio)

Stored Procedure con Parámetros de Tabla (TVP)

Ideal para inserciones masivas.

// 1. DTO que coincide con el User-Defined Table Type de SQL Server
public class DetalleDto { public int ProductoId { get; set; } public int Cantidad { get; set; } }

// 2. Lista de detalles a insertar
var detalles = new List<DetalleDto>
{
    new() { ProductoId = 101, Cantidad = 2 },
    new() { ProductoId = 205, Cantidad = 1 }
};

var builder = new SqlBuilder();
var command = builder
    .StoredProcedure("sp_InsertarDetallesFactura")
    .WithParameter("@FacturaId", 12345)
    .WithTableValuedParameter("@Detalles", detalles, "dbo.TipoDetalleFactura") // <-- Magia aquí
    .Build();

// `command` está listo para ser ejecutado, enviando la tabla de detalles en una sola llamada.

Script Transaccional con UnitOfWork

Genera un script T-SQL para crear una factura y sus detalles, capturando el ID del encabezado y reutilizándolo.

var uow = new UnitOfWork();

// 1. Define una variable para el ID de la nueva factura
var facturaIdVar = new ScriptVariable("@NuevaFacturaID", "INT");

// 2. Agrega el comando para insertar el encabezado y captura el nuevo ID
uow.AddAndCaptureIdentity(facturaIdVar, builder =>
    builder.InsertInto("Facturas")
           .Values(new { ClienteId = 42, Fecha = DateTime.UtcNow })
           .Build());

// 3. Itera sobre los detalles y usa la variable del ID de la factura
foreach (var detalle in detalles) // 'detalles' es una lista de objetos
{
    uow.Add(builder =>
        builder.InsertInto("DetallesFactura")
               .Values(detalle)
               .WithParameter("@FacturaID", facturaIdVar) // Reutiliza el ID capturado
               .Build());
}

// 4. Genera el script final
string transactionalScript = uow.BuildTransactionalScript();

/*
El script generado contendrá la estructura completa BEGIN/COMMIT/ROLLBACK TRANSACTION,
declarando la variable @NuevaFacturaID, ejecutando el primer INSERT, capturando
el ID con SCOPE_IDENTITY(), y luego usándolo en los siguientes INSERTs.
*/

📄 Licencia

Este proyecto está licenciado bajo la Licencia MIT. Siéntete libre de usarlo en tus proyectos personales y comerciales. Ver el archivo LICENSE para más detalles.

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Quantum.Data.SqlBuilder:

Package Downloads
Quantum.Data.Executor

Librería de acceso a datos moderna y extensible. Actúa como el motor de ejecución para los scripts generados por Quantum.Data.SqlBuilder, proporcionando una interfaz unificada para SQL Server y servicios web ASMX heredados.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.2 30 9/12/2025
1.0.1 73 9/12/2025
1.0.0 132 9/11/2025

Lanzamiento inicial de la librería. Incluye constructor fluido para CRUD,
 soporte para SPs, mapeo de DTOs, cláusulas avanzadas (JOIN, IN, OR),
 paginación y generación de scripts transaccionales.