https://github.com/jodendaal/graphql.sql.builder
SQL Query Builder Utility for .NET
https://github.com/jodendaal/graphql.sql.builder
csharp dotnet dotnet-core dynamic-sql generator graphql query query-builder sql sqlserver
Last synced: 17 days ago
JSON representation
SQL Query Builder Utility for .NET
- Host: GitHub
- URL: https://github.com/jodendaal/graphql.sql.builder
- Owner: jodendaal
- License: mit
- Created: 2021-10-27T12:49:12.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-01-21T16:37:25.000Z (over 2 years ago)
- Last Synced: 2025-04-07T20:43:44.338Z (29 days ago)
- Topics: csharp, dotnet, dotnet-core, dynamic-sql, generator, graphql, query, query-builder, sql, sqlserver
- Language: C#
- Homepage:
- Size: 70.3 KB
- Stars: 5
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# GraphQL.SQL.Builder for .NET
[](https://github.com/jodendaal/GraphQL.SQL.Builder/actions/workflows/dotnet.yml) [](https://www.nuget.org/packages/GraphQL.SQL.Builder) [](https://github.com/arco-design/arco-design/blob/main/LICENSE)SQL Query Builder Utility
Useful for scenarios where dynamic SQL is required. Supports multiple condition set logic.
Generate Select, Insert, Update and Delete statements with parameters.
Additional features include : Paging, Advanced Condition Sets, Auto Parameter Naming
Currently used in [GraphQL.SQL](https://github.com/jodendaal/GraphQL.SQL) for dynamically generating SQL statements.
## Getting Started
#### Install Package
```
Install-Package GraphQL.SQL.Builder
```
https://www.nuget.org/packages/GraphQL.SQL.Builder/
## Simple Usage
```csharp
public DataTable GetUser(int userId)
{
var query = new SelectQueryBuilder("Users", "U");
query.Field("UserId", "Id").
Field("UserName").
Field("Password").
Condition("U.UserId", ColumnOperator.Equals, query.AddParam(userId,"UserId"));
var sqlCommand = query.ToCommand();var table = new DataTable();
using (var connection = new SqlConnection("connection_string"))
{
connection.Open();
sqlCommand.Connection = connection;using (var dataAdapter = new SqlDataAdapter(sqlCommand))
{
dataAdapter.Fill(table);
}
}return table;
}
```
##### Output
```sql
SELECT
UserId AS Id,
UserName,
Password
FROM Users U
WHERE U.UserId = @UserId
--Parameters
@UserId=1
```
## Paging
```csharp
var query = new SelectQueryBuilder("Users");
query.Field("UserId").
Field("UserName").
Condition("UserId", ColumnOperator.Equals, query.AddParam(1,"UserId")).
Page(query.AddParam(1, "_PageNumber"), query.AddParam(10, "_PageSize"), "UserId");
```
##### Output
```sql
SELECT
UserId,
UserName
FROM Users
WHERE UserId = @UserId
ORDER BY UserId
OFFSET @_PageSize * (@_PageNumber - 1)
ROWS FETCH NEXT @_PageSize ROWS ONLY--Parameters
@_PageNumber=1,@_PageSize=10,@UserId=1
```
## Condition Sets Usage
```csharp
//Find users who are admins and username is either tim or connor
var query = new SelectQueryBuilder("Users");
query.Field("UserId").
Field("UserName").
Field("IsAdmin").
Condition("IsAdmin", ColumnOperator.Equals, query.AddParam(true,"IsAdmin")).
ConditionSet(1, SetOperator.And, (set) =>
{
set.OrCondition("UserName", ColumnOperator.Equals, query.AddParam("tim")).
OrCondition("UserName", ColumnOperator.Equals, query.AddParam("connor"));
});
```
##### Output
```sql
SELECT
UserId,
UserName,
IsAdmin
FROM Users
WHERE (IsAdmin = @IsAdmin) AND (UserName = @p_1 OR UserName = @p_2)--Parameters
@IsAdmin=1,@p_1='tim',@p_2='connor'
```
## Multiple Condition Sets```csharp
//(Find users who are admins and username is either tim or connor) and password='password'
var query = new SelectQueryBuilder("Users");
query.Field("UserId").
Field("UserName").
Field("IsAdmin").
Field("Password").
ConditionSet(1, SetOperator.And, (set) =>
{
set.AndCondition("IsAdmin", ColumnOperator.Equals, query.AddParam(true, "IsAdmin")).
OrCondition("UserName", ColumnOperator.Equals, query.AddParam("tim")).
OrCondition("UserName", ColumnOperator.Equals, query.AddParam("connor"));
}).
ConditionSet(2, SetOperator.And, (set) =>
{
set.OrCondition("Password", ColumnOperator.Equals, query.AddParam("password")).
OrCondition("Password", ColumnOperator.Equals, query.AddParam("Test123")).
});
```
##### Output
```sql
SELECT
UserId,
UserName,
IsAdmin,
Password
FROM Users
WHERE (((IsAdmin = @IsAdmin) AND (UserName = @p_1 OR UserName = @p_2))) AND (Password = @p_3 or Password=@p_4)
--Parameters
@IsAdmin=1,@p_1='tim',@p_2='connor',@p_3='password'
```
## Select
```csharp
var query = new SelectQueryBuilder("Users", "U");
query.Field("UserId", "Id").
Field("UserName").
Field("Password").
Condition("U.UserId", ColumnOperator.Equals, "1");
```
##### Output
```sql
SELECT
UserId AS Id,
UserName,
Password
FROM Users U
WHERE U.UserId = 1
```
## Insert
```csharp
var insert = new InsertQueryBuilder("Users");
insert.Field("UserId", insert.AddParam("1")).
Field("Password", insert.AddParam("test123"));
```
##### Output
```sql
INSERT INTO Users
(
UserId,
Password
)
VALUES
(
@p_0,
@p_1
)
```## Insert From Select
```csharp
var insert = new InsertQueryBuilder("Users");
insert.Field("UserId").
Field("Password").
From("Users_Backup", "UB", (query) =>
{
query.Field("UB.UserId").
Field("UB.Password").
Condition("UB.UserId", ColumnOperator.Equals, insert.AddParam(1, "UserId"));
});
```
##### Output
```sql
INSERT INTO Users
(
UserId,
Password
)
SELECT
UB.UserId,
UB.Password
FROM Users_Backup UB
WHERE UB.UserId = @UserId
```## Update
```csharp
var update = new UpdateQueryBuilder("Users");
update.Field("UserId", update.AddParam(10, "NewUserId")).
Field("Password", update.AddParam("3423", "Password")).
Condition("UserId", ColumnOperator.Equals, update.AddParam("1", "UserId"));
```
##### Output
```sql
UPDATE Users
SET UserId=@NewUserId,
Password=@Password
WHERE UserId = @UserId
```## Update from Join
```csharp
var update = new UpdateQueryBuilder("Users","U");
update.Join("User_Backup UB", JoinType.Inner, "UB.UserId=U.UserId").
Field("Password", "UB.Password").
Condition("U.UserId", ColumnOperator.Equals, update.AddParam("1", "UserId"));
```
##### Output
```sql
UPDATE U
SET Password=UB.Password
FROM Users U
INNER JOIN User_Backup UB ON UB.UserId=U.UserId
WHERE U.UserId = @UserId
```## Delete
```csharp
var delete = new DeleteQueryBuilder("Users");
delete.Condition("UserId", ColumnOperator.Equals, delete.AddParam("1", "UserId"));
```
##### Output
```sql
DELETE FROM Users
WHERE UserId = @UserId
```## Delete With Join
```csharp
var delete = new DeleteQueryBuilder("Users","U");
delete.Join("User_Backup UB", JoinType.Inner, "UB.UserId=U.UserId").
Condition("U.UserId", ColumnOperator.Equals, delete.AddParam("1", "UserId"));
```
##### Output
```sql
DELETE U FROM Users U
INNER JOIN User_Backup UB ON UB.UserId=U.UserId
WHERE U.UserId = @UserId
```## Join
```csharp
var query = new SelectQueryBuilder("Users", "U");
query.Field("U.UserId", "Id").
Field("U.UserName").
Field("U.Password").
Join("Preferences P",JoinType.Inner,"P.UserId = U.UserId").
Field("P.Theme").
Condition("U.UserId", ColumnOperator.Equals, "1");
```
##### Output
```sql
SELECT
U.UserId AS Id,
U.UserName,
U.Password,
P.Theme
FROM Users U
INNER JOIN Preferences P ON P.UserId = U.UserId
WHERE U.UserId = 1
```
## Count
```csharp
var query = new SelectQueryBuilder("Users", "U");
query.Count("*", "[RecordCount]").
Condition("U.UserId", ColumnOperator.Equals, "1");
```
##### Output
```sql
SELECT
COUNT(*) AS [RecordCount]
FROM Users U
WHERE U.UserId = 1
```
# Buy me a coffee
https://www.buymeacoffee.com/timdoestech?new=1