Dapper学习入门二

Dapper学习入门一:

https://blog.csdn.net/czjnoe/article/details/106392582

准备:

创建实体Course和StudentDto:

public class Course
    {
        public string ID { get; set; }
        public string CourseName { get; set; }//[CourseName]
    }



public class StudentDto
    {
        public string ID { get; set; }
        public string NAME { get; set; }

        public Course Course { get; set; }
    }

事务:


                using (IDbConnection db = DapperFactory.GetConnection(Enums.MyDbType.SqlServer, "Data Source=localhost;Initial Catalog=test;Integrated Security=True"))
                {
                        db.Open();
                        var tran = db.BeginTransaction();
                        try
                        {
                            Dictionary<string, object> dicParam = new Dictionary<string, object>();
                            dicParam["ID"] = Guid.NewGuid().ToString();
                            dicParam["NAME"] = "陈兆杰";
                            dicParam["TIME"] = DateTime.Now;
                             effectRows = db.Execute("insert into Student(ID,NAME,TIME) values(@ID,@NAME,@TIME)", dicParam, tran);

                            tran.Commit();
                        }
                        catch (Exception ex)
                        {
                            tran.Rollback();
                        }
                    }

存储过程:

Sql Server 存储过程:

USE [test]
GO
/****** Object:  StoredProcedure [dbo].[TestProc]    Script Date: 05/31/2020 13:48:54 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER procedure [dbo].[TestProc]
@StuId    nvarchar(50),
@Name nvarchar(50) output
as
declare @result nvarchar;
begin
    if(@StuId is not null and @StuId <> '')
    begin
        select @Name=NAME
        from Student
        where ID=@StuId;
        return @StuId;
    end
    else
    begin
        set @Name='hihihi';
        return @StuId;
    end
end

调用存储过程:


                using (IDbConnection db = DapperFactory.GetConnection(Enums.MyDbType.SqlServer, "Data Source=localhost;Initial Catalog=test;Integrated Security=True"))
                {
                        //调用存储过程
                    {
                        var param = new DynamicParameters();
                        param.Add("@StuId", "859713145");
                        param.Add("@Name", dbType: DbType.String, direction: ParameterDirection.Output, size: 50);
                        param.Add("@result", dbType: DbType.String, direction: ParameterDirection.ReturnValue,size:50);//输出值需要赋值size

                        db.Execute("TestProc", param, commandType: CommandType.StoredProcedure);
                        string Name = param.Get<string>("Name");
                        int? ReturnValue = param.Get<int>("@result");
                    }
                    }

 

多结果查询:

 using (IDbConnection db = DapperFactory.GetConnection(Enums.MyDbType.SqlServer, "Data Source=localhost;Initial Catalog=test;Integrated Security=True"))
                {

                       //多结果查询(Read表顺序,要与sql语句表的顺序一致,不然会有问题)
                    {
                        string sql = @"
                            select * from Student where ID = @ID;
                            select * from Course;";
                        using (var multi = db.QueryMultiple(sql, new { id = "1" }))
                        {
                            var orders = multi.Read<Student>().ToList();
                            var customer = multi.Read<Course>().FirstOrDefault();

                        }
                    }
                 }

 

多表查询:

要是觉得第一种太麻烦,也可以输出成dynamic类型

注意:

splitOn:用来区分第二表的字段

 using (IDbConnection db = DapperFactory.GetConnection(Enums.MyDbType.SqlServer, "Data Source=localhost;Initial Catalog=test;Integrated Security=True"))
{
      string sql = @"select s.*,c.ID,c.CourseName from Student s,Course c where s.ID =c.ID and s.ID=@ID";

                        //方法1:
                        var list2 = db.Query<Student, Course, StudentDto>(sql, (student, course) =>
                       {
                           StudentDto stuDto = new StudentDto();
                           stuDto.NAME = student.NAME;
                           stuDto.ID = student.ID;
                           course.ID = student.ID;
                           stuDto.Course = course;
                           return stuDto;

                       }, new { ID = "1786863176" }, splitOn: "ID,CourseName").ToList();

                        //方法2:
                        var dynamic = db.Query(sql, new { ID = "1786863176" }).ToList();

                          //方法3:
                        var list3 = db.Query<StudentDto>(sql, new { ID = "1786863176" }).ToList();
}

 

扩展:

using (IDbConnection db = DapperFactory.GetConnection(Enums.MyDbType.SqlServer, "Data Source=localhost;Initial Catalog=test;Integrated Security=True"))
                {

                    var  list=db.Query<Student>("SELECT * FROM Student where ID in @IDS", new { IDS = new String[] { "1786863176", "1963140912" } }).ToList();


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值