开放的编程资料库

当前位置:我爱分享网 > C#教程 > 正文

C# Dapper 教程

C#Dapper教程展示了如何使用Dapper在C#中对数据库进行编程。在本教程中,我们使用SQLServer。C#教程是C#语言的综合教程。

小巧玲珑

Dapper是适用于Microsoft.NET平台的简单对象映射器。它是一个将面向对象领域模型映射到传统关系数据库的框架。

Dapper的目标是代码简单性和性能。

Dapper没有特定于数据库的实现细节,它适用于所有.NETADO提供程序,包括SQLite、SQLCE、Firebird、Oracle、MySQL、PostgreSQL和SQLServer。Dapper由StackOverflow团队创建。

$ dotnet add package dapper

要使用Dapper,我们使用dotnet工具将包引用添加到项目。

$ dotnet add package System.Data.SqlClient

我们还包括SQLServer的驱动程序。

CREATE TABLE cars(name, price) (
    id INT identity(1,1) NOT NULL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    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);

在我们的例子中,我们使用这个表。

C#DapperExecuteScalar

ExecuteScalar方法执行选择单个值的查询。

using System.Data.SqlClient;
using Dapper;

namespace ExecuteScalarEx
{
    class Program
    {
        static void Main(string[] args)
        {
            var cs = @"Server=localhost\SQLEXPRESS;Database=testdb;Trusted_Connection=True;";

            using var con = new SqlConnection(cs);
            con.Open();

            var version = con.ExecuteScalar<string>("SELECT @@VERSION");

            Console.WriteLine(version);
        }
    }
}

该示例检索SQLServer数据库的版本。

var version = con.ExecuteScalar<string>("SELECT @@VERSION");

ExecuteScalar方法执行SELECT@@VERSION查询,它返回一个值:SQLServer的版本。

$ dotnet run
Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
        Sep 24 2019 13:48:23
        Copyright (C) 2019 Microsoft Corporation
        Express Edition (64-bit) on Windows 10 Pro 10.0 <X6> (Build 18362: ) (Hypervisor)

C#Dapper查询

Query方法执行查询并将其映射到动态对象列表。

using System.Data.SqlClient;
using Dapper;

namespace RetrieveAll
{
    class Car
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Price { get; set; }

        public override string ToString()
        {
            return $"{Id} {Name} {Price}";
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var cs = @"Server=localhost\SQLEXPRESS;Database=testdb;Trusted_Connection=True;";

            using var con = new SqlConnection(cs);
            con.Open();

            var cars = con.Query<Car>("SELECT * FROM cars").ToList();

            cars.ForEach(car => Console.WriteLine(car));
        }
    }
}

该示例从cars表中检索所有行。

var cars = con.Query<Car>("SELECT * FROM cars").ToList();

Query方法执行SELECT*FROMcars语句并返回对象列表。

cars.ForEach(car => Console.WriteLine(car));

我们遍历列表并将所有元素打印到控制台。

$ dotnet run
1 Audi 52642
2 Mercedes 57127
3 Skoda 9000
4 Volvo 29000
5 Bentley 350000
6 Citroen 21000
7 Hummer 41400
8 Volkswagen 21600

C#Dapper执行

Execute方法执行SQL查询

using System.Data.SqlClient;
using Dapper;

namespace UpdateRow
{
    class Program
    {
        static void Main(string[] args)
        {
            var cs = @"Server=localhost\SQLEXPRESS;Database=testdb;Trusted_Connection=True;";

            using var con = new SqlConnection(cs);
            con.Open();

            int nOfRows = con.Execute("UPDATE dbo.[cars] SET [price] = 52000 WHERE [id] = 1");
            Console.WriteLine("'UPDATE' affected rows: {0}", nOfRows);
        }
    }
}

该示例更新单辆汽车的价格并返回受影响的行数。

int nOfRows = con.Execute("UPDATE dbo.[cars] SET [price] = 52000 WHERE [id] = 1");

UPDATE语句更新汽车的价格。Execute方法返回更新的行数。

Console.WriteLine("'UPDATE' affected rows: {0}", nOfRows);

更新的行数打印到终端。

$ dotnet run
'UPDATE' affected rows: 1

C#Dapper参数化查询

参数化查询提高了安全性和性能。当我们编写参数化查询时,我们使用占位符而不是直接将值写入查询。

using System.Data.SqlClient;
using Dapper;

namespace Parameterized
{
    class Car
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Price { get; set; }

        public override string ToString()
        {
            return $"{Id} {Name} {Price}";
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var cs = @"Server=localhost\SQLEXPRESS;Database=testdb;Trusted_Connection=True;";

            using var con = new SqlConnection(cs);
            con.Open();

            var car = con.QueryFirst<Car>("SELECT * FROM cars WHERE id=@id", 
                new { id = 3 });

            Console.WriteLine(car);
        }
    }
}

该示例从表中选择特定行。

var car = con.QueryFirst<Car>("SELECT * FROM cars WHERE id=@id", 
    new { id = 3 });

QueryFirst返回SQL查询的第一个结果。@id是一个需要填充的占位符。第二个参数是填充占位符的参数。

$ dotnet run
3 Skoda 9000

C#Dapper删除行

以下示例从表中删除一行。

using System.Data.SqlClient;
using Dapper;

namespace DeleteRow
{
    class Program
    {
        static void Main(string[] args)
        {
            var cs = @"Server=localhost\SQLEXPRESS;Database=testdb;Trusted_Connection=True;";

            using var con = new SqlConnection(cs);
            con.Open();

            int delRows = con.Execute(@"DELETE FROM [cars] WHERE Id = @Id", new { Id = 1 });

            if (delRows > 0)
            {
                Console.WriteLine("car deleted");
            }
        }
    }
}

该示例使用Execute方法删除一行。

C#Dapper动态参数

DynamicParameters是一组可以传递给DapperQuery和Execute方法的参数。

using System.Data;
using System.Data.SqlClient;
using Dapper;

namespace InsertRow
{
    class Program
    {
        static void Main(string[] args)
        {
            var cs = @"Server=localhost\SQLEXPRESS;Database=testdb;Trusted_Connection=True;";

            using var con = new SqlConnection(cs);
            con.Open();

            var query = "INSERT INTO cars(name, price) VALUES(@name, @price)";

            var dp = new DynamicParameters();
            dp.Add("@name", "BMW", DbType.AnsiString, ParameterDirection.Input, 255);
            dp.Add("@price", 36600);

            int res = con.Execute(query, dp);

            if (res > 0)
            {
                Console.WriteLine("row inserted");
            }
        }
    }
}

该示例将一个新行插入到cars表中。

var dp = new DynamicParameters();
dp.Add("@name", "BMW", DbType.AnsiString, ParameterDirection.Input, 255);
dp.Add("@price", 36600);

我们动态提供参数值及其类型。

int res = con.Execute(query, dp);

动态参数作为Execute方法的第二个参数传递。

在本文中,我们展示了如何使用Dapper工具在C#中对数据库进行编程。

列出所有C#教程。

未经允许不得转载:我爱分享网 » C# Dapper 教程

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏