https://github.com/besogenebashvili/sqlpipe
Simple SQL builder DSL for .NET
https://github.com/besogenebashvili/sqlpipe
database dotnet dsl nuget nuget-package sql sql-builder sql-dsl sql-execution sql-server
Last synced: 10 days ago
JSON representation
Simple SQL builder DSL for .NET
- Host: GitHub
- URL: https://github.com/besogenebashvili/sqlpipe
- Owner: BesoGenebashvili
- License: mit
- Created: 2022-11-08T16:38:42.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2023-11-19T02:50:05.000Z (about 2 years ago)
- Last Synced: 2025-09-24T03:19:41.013Z (4 months ago)
- Topics: database, dotnet, dsl, nuget, nuget-package, sql, sql-builder, sql-dsl, sql-execution, sql-server
- Language: C#
- Homepage:
- Size: 70.3 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# SqlPipe
SqlPipe is a C# DSL that simplifies SQL tasks while safeguarding against writing faulty queries, ensuring reliable database operations for executing, inserting, updating, and retrieving data
[](https://www.nuget.org/packages/SqlPipe/)
[](https://www.nuget.org/packages/SqlPipe/)
[](https://github.com/BesoGenebashvili/SqlPipe/blob/main/LICENSE.md)

### SQL Query Generation Example
```csharp
var sql = SELECT()
.TOP(10)
.FROM("dbo.CLIENTS c")
.INNER_JOIN("dbo.ORDERS o")
.ON("c.ID = o.CLIENT_ID")
.WHERE("c.IS_ACTIVE = @isActive")
.ORDER_BY("c.ID")
.ORDER_BY_DESC("o.DATE")
.ToPrettySql();
```
#### Generated SQL Query:
```sql
SELECT TOP (10) *
FROM dbo.CLIENTS c
INNER JOIN dbo.ORDERS o
ON c.ID = o.CLIENT_ID
WHERE c.IS_ACTIVE = @isActive
ORDER BY c.ID, o.DATE DESC;
```
### Getting Started
To use SqlPipe, import the necessary namespaces and create an executor to interact with the database:
```csharp
using SqlPipe;
using static SqlPipe.Extensions;
var executor = new Executor("data source=_;initial catalog=SqlPipeDocs;trusted_connection=true");
```
### Creating a Table
```csharp
await executor.TextAsync(
"""
CREATE TABLE dbo.CLIENTS(
ID INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
FIRST_NAME VARCHAR(100) NOT NULL,
LAST_NAME VARCHAR(100) NOT NULL,
AGE TINYINT NULL,
IS_ACTIVE BIT NOT NULL);
""");
```
### Inserting Data
```csharp
var clientIdOutParam = SqlOutParam("@IDENTITY", SqlDbType.Int);
var inserted = await executor.INSERT_INTO(
"dbo.CLIENTS",
SqlParams(
SqlParam("@firstName", "Beso", "FIRST_NAME"),
SqlParam("@lastName", "Genebashvili", "LAST_NAME"),
SqlParam("@age", 24, "AGE"),
SqlParam("@isActive", true, "IS_ACTIVE"),
clientIdOutParam));
// Check if insertion was successful
if (inserted) Console.WriteLine($"Inserted client `{clientIdOutParam.Value}`");
else Console.WriteLine("Insert was unsuccessful");
```
### Updating Data
```csharp
var updated = await executor.UPDATE(
"dbo.CLIENTS",
SqlParams(
SqlParam("@id", 1),
SqlParam("@age", 15, "AGE")),
"Id = @id");
// Check if update was successful
if (updated) Console.WriteLine($"Updated client `{1}`");
else Console.WriteLine("Update was unsuccessful");
```
### Querying Single Record
```csharp
var querySingleSql = SELECT("ID as Id",
"FIRST_NAME as FirstName",
"LAST_NAME as LastName")
.FROM("dbo.CLIENTS")
.WHERE("Id = @id")
.ToSql();
var singleRecord = await executor.QuerySingleAsync(
querySingleSql,
SqlParams(SqlParam("id", 1)),
r => new
{
Id = r.GetValueAs("Id"),
FirstName = r.GetValueAs("FirstName"),
LastName = r.GetValueAs("LastName")
});
Console.WriteLine(singleRecord);
```
### Querying a List
```csharp
var queryListSql = SELECT("*", "FIRST_NAME + ' ' + LAST_NAME as FULL_NAME")
.TOP(10)
.FROM("dbo.CLIENTS")
.WHERE("IS_ACTIVE = @isActive")
.ORDER_BY("ID")
.ORDER_BY_DESC("AGE")
.ORDER_BY_ASC("FULL_NAME")
.ToPrettySql();
var list = await executor.QueryAsync(
queryListSql,
SqlParams(SqlParam("isActive", true)),
r => new
{
Id = r.GetValueAs("ID"),
FullName = r.GetValueAs("FULL_NAME"),
Age = r.GetValueAsNullable("AGE"),
IsActive = r.GetValueAs("IS_ACTIVE")
});
Console.WriteLine(string.Join('\n', list));
```
## Installation
```
Install-Package SqlPipe
```
```
dotnet add package SqlPipe
```