Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示

简介:

Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下:

完整Demohttp://pan.baidu.com/s/1i3TcEzj

注 意 事 项:http://www.cnblogs.com/dunitian/p/5221058.html

平台之大势何人能挡? 带着你的Net飞奔吧!

http://www.cnblogs.com/dunitian/p/4822808.html#skill

扩展篇:http://www.cnblogs.com/dunitian/p/5710382.html

先安装一下Dapper(建议用nuget包来管理)

连接字符串:

string connStr = "Data Source=.;Initial Catalog=DapperDB;User ID=用户名;Password=密码";

强类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#region 强类型
             //public static IEnumerable<T> Query<T>(this IDbConnection cnn, string sql, object param = null, SqlTransaction transaction = null, bool buffered = true)
             using  (SqlConnection conn =  new  SqlConnection(connStr))
             {
                 conn.Open();
 
                 //无参查询
                 //var qqModeList = conn.Query<QQModel>("select Id,Name,Count from QQModel");
                 //带参查询
                 var  qqModeList = conn.Query<QQModel>( "select Id,Name,Count from QQModel where Id in @id and Count>@count" new  { id =  new  int [] { 1, 2, 3, 4, 5, 6 }, count = 1 });
                 foreach  ( var  item  in  qqModeList)
                 {
                     Console.WriteLine(item.Id +  " "  + item.Name +  " "  + item.Count);
                 }
             }
             #endregion

动态类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
#region 动态类型
             ////逆天动态类型用的比较多[可能是MVC ViewBag用多了]
             //public static IEnumerable<dynamic> Query (this IDbConnection cnn, string sql, object param = null, SqlTransaction transaction = null, bool buffered = true)
             using  (SqlConnection conn =  new  SqlConnection(connStr))
             {
                 conn.Open();
                 var  qqModeList = conn.Query( "select Id,Name,Count from QQModel" ).ToList();
                 foreach  ( var  item  in  qqModeList)
                 {
                     Console.WriteLine(item.Id +  " "  + item.Name +  " "  + item.Count);
                 }
             }
             #endregion

多映射:

1
2
3
4
5
6
7
8
9
10
11
12
using  (SqlConnection conn =  new  SqlConnection(connStr))
{
     string  sqlStr =  @"select A.Id,A.Title,S.SeoKeywords from Article A
                     inner join SeoTKD S on A.SeoId=S.Id
                     where A.Id in @ids" ;
     conn.Open();
     var  articleList = conn.Query(sqlStr,  new  { ids =  new  int [] { 41, 42, 43, 44, 45, 46, 47, 48 } });
     foreach  ( var  item  in  articleList)
     {
         Console.WriteLine(item.Id +  " | "  + item.SeoKeywords +  " | :"  + item.Title);
     }
}

 多返回值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using  (SqlConnection conn =  new  SqlConnection(connStr))
{
     string  sqlStr =  @"select Id,Title,Author from Article where Id = @id
                       select * from QQModel where Name = @name
                       select * from SeoTKD where Status = @status" ;
     conn.Open();
     using  ( var  multi = conn.QueryMultiple(sqlStr,  new  { id = 11, name =  "打代码" , status = 99 }))
     {
         //multi.IsConsumed   reader的状态 ,true 是已经释放
         if  (!multi.IsConsumed)
         {
             //注意一个东西,Read获取的时候必须是按照上面返回表的顺序 (article,qqmodel,seotkd)
             //强类型
             var  articleList = multi.Read<Temp>(); //类不见得一定得和表名相同
             var  QQModelList = multi.Read<QQModel>();
             var  SeoTKDList = multi.Read<SeoTKD>();
 
             //动态类型
             //var articleList = multi.Read();
             //var QQModelList = multi.Read();
             //var SeoTKDList = multi.Read();
 
             #region 输出
             foreach  ( var  item  in  QQModelList)
             {
                 Console.WriteLine(item.Id +  " "  + item.Name +  " "  + item.Count);
             }
             foreach  ( var  item  in  SeoTKDList)
             {
                 Console.WriteLine(item.Id +  " | "  + item.SeoKeywords);
             }
             foreach  ( var  item  in  articleList)
             {
                 Console.WriteLine(item.Author);
             }
             #endregion
         }
 
     }
}

 增删改查:(删项目里面基本上不用)

1
2
3
4
5
6
7
8
9
10
11
12
13
using  (SqlConnection conn =  new  SqlConnection(connStr))
{
     conn.Open();
     //增
     int  count = conn.Execute( "insert into Article values(@title,@content,@author,961,1,2,2,N'2015-11-23 11:06:36.553',N'2015-11-23 11:06:36.553',N'5,103,113',91,N'3,5,11',0,N'/Images/article/16.jpg')" new  { title =  "Title1" , content =  "TContent1" , author =  "毒逆天"  });
 
     //改
     //int count = conn.Execute("update Article set Title=@title where Id=@id", new { title = "么么哒", id = 274 });
     if  (count > 0)
     {
         Console.WriteLine(count +  "条操作成功" );
     }
}

存储过程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//查询
using  (SqlConnection conn =  new  SqlConnection(connStr))
{
     conn.Open();
     //参数名得和存储过程的变量名相同(参数可以跳跃传,键值对方式即可)
     //动态类型
     //var list = conn.Query("usp_test", new { aId = 11 }, commandType: CommandType.StoredProcedure);
     //强类型
     var  list = conn.Query<TitleAndKeyWords>( "usp_test" new  { aId = 11 }, commandType: CommandType.StoredProcedure);
     foreach  ( var  item  in  list)
     {
         Console.WriteLine(item.Id +  " | "  + item.SeoKeywords +  " | :"  + item.Title);
     }
}
 
//插入
using  (SqlConnection conn =  new  SqlConnection(connStr))
{
     conn.Open();
     int  count = conn.Execute( "usp_insertArticle" new  { title =  "Title11" , content =  "TContent1" , author =  "毒逆天"  }, commandType: CommandType.StoredProcedure);
     if  (count > 0)
     {
         Console.WriteLine(count +  "条操作成功" );
     }
}
 
//更新
using  (SqlConnection conn =  new  SqlConnection(connStr))
{
     conn.Open();
     int  count = conn.Execute( "usp_updateArticle" new  { id = 276, title =  "Dapper使用"  }, commandType: CommandType.StoredProcedure);
     if  (count > 0)
     {
         Console.WriteLine(count +  "条操作成功" );
     }
}

事物的使用:

先看看ADO.Net怎么用的

复制代码
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                string sql = @"insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1) 
                               insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1) 
                               insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1) 
                               insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 999999999999999999999999) 
                               insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1) 
                               insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1) 
                               ";
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    conn.Open();
                    cmd.Transaction = conn.BeginTransaction();
                    try
                    {
                        int i = cmd.ExecuteNonQuery();
cmd.Transaction.Commit(); Console.WriteLine(i); }
catch (Exception ex) { cmd.Transaction.Rollback(); Console.WriteLine(ex); } } }
复制代码

再看看Dapper的

复制代码
using (SqlConnection conn = new SqlConnection(connStr))
            {
                string sql = @"insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1) 
                               insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1) 
                               insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1) 
                               insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 9999999999999999999) 
                               insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1) 
                               insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1) 
                               ";
                conn.Open();
                var transaction = conn.BeginTransaction();
                try
                {
                    int i = conn.Execute(sql, transaction: transaction);
                    transaction.Commit();
                    Console.WriteLine(i);
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    Console.WriteLine(ex);
                }
            }
复制代码

 

 


本文转自毒逆天博客园博客,原文链接:http://www.cnblogs.com/dunitian/p/5226265.html,如需转载请自行联系原作者

相关文章
|
13天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
37 4
SpringBoot入门(4) - 添加内存数据库H2
|
15天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
26 2
SpringBoot入门(4) - 添加内存数据库H2
|
8天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
45 13
|
2天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
15 4
|
10天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
25 2
|
16天前
|
存储 人工智能 Java
Neo4j从入门到精通:打造高效知识图谱数据库 | AI应用开发
在大数据和人工智能时代,知识图谱作为一种高效的数据表示和查询方式,逐渐受到广泛关注。本文从入门到精通,详细介绍知识图谱及其存储工具Neo4j,涵盖知识图谱的介绍、Neo4j的特点、安装步骤、使用方法(创建、查询)及Cypher查询语言的详细讲解。通过本文,读者将全面了解如何利用Neo4j处理复杂关系数据。【10月更文挑战第14天】
62 6
|
15天前
|
存储 数据挖掘 数据库
数据库数据恢复—SQLserver数据库ndf文件大小变为0KB的数据恢复案例
一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。 存储损坏,数据库不可用。管理员试图恢复数据库,发现有数个ndf文件大小变为0KB。 虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库。
|
15天前
|
关系型数据库 MySQL 数据库
一个 MySQL 数据库死锁的案例和解决方案
本文介绍了一个 MySQL 数据库死锁的案例和解决方案。
19 3
|
29天前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
41 15
|
18天前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
下一篇
无影云桌面