C# SqlKata
上次修改时间:2023 年 7 月 13 日
在本文中,我们将展示如何使用 SqlKata 库在 C# 中进行数据库编程。 SqlKata 使用 SqlBuilder 模式来定义查询。
SqlKata 是一个用于 C# 的流畅 SQL 查询构建器。 它允许我们使用方法链轻松创建 SQL 语句。
$ dotnet add project SqlKata $ dotnet add project SqlKata.Execution
我们添加 SqlKata 包。
$ dotnet add project Npgsql
我们添加 PostgreSQL 数据库的驱动程序。
CREATE TABLE cars(id serial PRIMARY KEY, name VARCHAR(255), price INT);
INSERT INTO cars(name, price) VALUES('Audi', 52642);
INSERT INTO cars(name, price) VALUES('Mercedes', 57127);
INSERT INTO cars(name, price) VALUES('Skoda', 9000);
INSERT INTO cars(name, price) VALUES('Volvo', 29000);
INSERT INTO cars(name, price) VALUES('Bentley', 350000);
INSERT INTO cars(name, price) VALUES('Citroen', 21000);
INSERT INTO cars(name, price) VALUES('Hummer', 41400);
INSERT INTO cars(name, price) VALUES('Volkswagen', 21600);
在示例中,我们使用此表。
SqlKata 查询单行
在第一个示例中,我们查询单行。
using Npgsql;
using SqlKata.Compilers;
using SqlKata.Execution;
string cs = @"User ID=postgres;Password=passwd;Host=localhost;Database=testdb";
using var con = new NpgsqlConnection(cs);
con.Open();
var compiler = new PostgresCompiler();
var db = new QueryFactory(con, compiler);
var car = db.Query("cars").Where("id", 1).First();
Console.WriteLine(car);
Console.WriteLine($"{car.id} {car.name} {car.price}");
我们选择 Id 等于 1 的行。
string cs = @"User ID=postgres;Password=passwd;Host=localhost;Database=testdb"; using var con = new NpgsqlConnection(cs); con.Open();
首先,我们定义连接字符串并打开数据库连接。
var compiler = new PostgresCompiler(); var db = new QueryFactory(con, compiler);
我们为我们的数据库选择编译器并定义一个 QueryFactory。 QueryFactory 是用于构建 SQL 查询的对象。
var car = db.Query("cars").Where("id", 1).First();
通过链接三个方法调用来构建查询:Query,它选择表名;Where,它定义 WHERE SQL 子句;以及 First,它从结果中返回第一行。
$ dotnet run
{DapperRow, id = '1', name = 'Audi', price = '52642'}
1 Audi 52642
SqlKata 获取所有行
在下一个示例中,我们获取所有行。
using Npgsql;
using SqlKata.Compilers;
using SqlKata.Execution;
string cs = @"User ID=postgres;Password=passwd;Host=localhost;Database=testdb";
using var con = new NpgsqlConnection(cs);
con.Open();
var compiler = new PostgresCompiler();
var db = new QueryFactory(con, compiler);
var cars = db.Query("cars").OrderByDesc("name").Get();
foreach (var car in cars)
{
Console.WriteLine($"{car.id} {car.name} {car.price}");
}
该程序从表中获取所有行,并按名称降序排列输出。
var cars = db.Query("cars").OrderByDesc("name").Get();
我们通过链接 Query、OrderByDesc 和 Get 调用来获得结果。
$ dotnet run 4 Volvo 29000 8 Volkswagen 21600 3 Skoda 9000 2 Mercedes 57127 7 Hummer 41400 6 Citroen 21000 5 Bentley 350000 1 Audi 52642
SqlKata 插入行
在下一个示例中,我们将新行插入到表中。
using Npgsql;
using SqlKata.Compilers;
using SqlKata.Execution;
string cs = @"User ID=postgres;Password=passwd;Host=localhost;Database=testdb";
using var con = new NpgsqlConnection(cs);
con.Open();
var compiler = new PostgresCompiler();
var db = new QueryFactory(con, compiler);
int n = db.Query("cars").Insert(new
{
name = "Toyota",
price = 27890
});
if (n == 1)
{
Console.WriteLine("New row inserted");
}
Insert 方法用于生成 INSERT SQL 语句。
SqlKata 删除行
在下一个示例中,我们从表中删除一行。
using Npgsql;
using SqlKata.Compilers;
using SqlKata.Execution;
string cs = @"User ID=postgres;Password=passwd;Host=localhost;Database=testdb";
using var con = new NpgsqlConnection(cs);
con.Open();
var compiler = new PostgresCompiler();
var db = new QueryFactory(con, compiler);
int id = 9;
int n = db.Query("cars").Where("id", id).Delete();
if (n == 1)
{
Console.WriteLine("row succesfully deleted");
}
该程序删除 id 等于 9 的行。
int n = db.Query("cars").Where("id", id).Delete();
要创建语句,我们使用了 Query、Where 和 Delete 方法调用。
SQL Server 示例
我们使用了 PostgreSQL 数据库。 下一个示例展示了如何为 SQL Server 创建一个简单的示例。
$ dotnet add package SqlKata $ dotnet add package SqlKata.Execution $ dotnet add package System.Data.SqlClient
我们将这三个包添加到我们的项目中。
DROP TABLE IF EXISTS cars;
CREATE TABLE cars(id INT PRIMARY KEY IDENTITY(1, 1), name VARCHAR(255), price INT);
INSERT INTO cars(name, price) VALUES('Audi',52642);
INSERT INTO cars(name, price) VALUES('Mercedes',57127);
INSERT INTO cars(name, price) VALUES('Skoda',9000);
INSERT INTO cars(name, price) VALUES('Volvo',29000);
INSERT INTO cars(name, price) VALUES('Bentley',350000);
INSERT INTO cars(name, price) VALUES('Citroen',21000);
INSERT INTO cars(name, price) VALUES('Hummer',41400);
INSERT INTO cars(name, price) VALUES('Volkswagen',21600);
我们有 SQL Server 的 SQL。
using System.Data.SqlClient;
using SqlKata.Compilers;
using SqlKata.Execution;
string cs = @"Server=localhost\SQLEXPRESS;Database=testdb;Trusted_Connection=True;";
using var con = new SqlConnection(cs);
con.Open();
var compiler = new SqlServerCompiler();
var db = new QueryFactory(con, compiler);
var cars = db.Query("cars").Get<Car>();
foreach (var car in cars)
{
Console.WriteLine(car);
}
class Car
{
public int Id { get; init; }
public string Name { get; init; }
public int Price { get; init; }
public Car(int Id, string Name, int Price)
{
this.Id = Id;
this.Name = Name;
this.Price = Price;
}
public override string ToString()
{
return $"[{this.Id} {this.Name} {this.Price}]";
}
}
在此示例中,我们获取 SQL Server 数据库表中所有的行。
using System.Data.SqlClient;
该命名空间已构建到 .NET Core 中。
using var con = new SqlConnection(cs);
我们使用 SqlConnection。
var compiler = new SqlServerCompiler();
我们使用 SqlServerCompiler。
来源
在本文中,我们展示了如何使用 SqlKata 在 C# 中进行数据库编程。
作者
列出所有 C# 教程。