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,如需转载请自行联系原作者

相关文章
|
24天前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
88 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
2月前
|
存储 SQL 分布式数据库
OceanBase 入门:分布式数据库的基础概念
【8月更文第31天】在当今的大数据时代,随着业务规模的不断扩大,传统的单机数据库已经难以满足高并发、大数据量的应用需求。分布式数据库应运而生,成为解决这一问题的有效方案之一。本文将介绍一款由阿里巴巴集团自主研发的分布式数据库——OceanBase,并通过一些基础概念和实际代码示例来帮助读者理解其工作原理。
164 0
|
1天前
|
SQL 存储 数据管理
SQL数据库的使用指南:从入门到精通
随着信息技术的飞速发展,数据库已成为各类企业和组织不可或缺的一部分。作为最流行的数据库管理系统之一,SQL数据库广泛应用于各种场景,如数据存储、数据管理、数据分析等。本文将详细介绍SQL数据库的使用方法,帮助初学者快速入门,并帮助有经验的开发者深化理解。一、SQL数据库基础首先,我们需要理解SQL数
15 2
|
1天前
|
SQL 存储 数据库
初识SQL数据库教程——从入门到精通
随着信息技术的飞速发展,数据库技术已成为计算机领域的重要组成部分。作为最流行的数据库管理系统之一,SQL数据库广泛应用于各类企业和组织的数据管理中。本文将带领读者从入门到精通,学习SQL数据库的相关知识。一、SQL数据库概述SQL(StructuredQueryLanguage)是一种用于管理关系数
11 2
|
26天前
|
Oracle 关系型数据库 数据库
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
打开oracle数据库报错“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。 数据库没有备份,无法通过备份去恢复数据库。用户方联系北亚企安数据恢复中心并提供Oracle_Home目录中的所有文件,急需恢复zxfg用户下的数据。 出现“system01.dbf需要更多的恢复来保持一致性”这个报错的原因可能是控制文件损坏、数据文件损坏,数据文件与控制文件的SCN不一致等。数据库恢复工程师对数据库文件进一步检测、分析后,发现sysaux01.dbf文件损坏,有坏块。 修复并启动数据库后仍然有许多查询报错,export和data pump工具使用报错。从数据库层面无法修复数据库。
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
|
10天前
|
存储 移动开发 数据库
HTML5 Web IndexedDB 数据库常用数据存储类型
IndexedDB 支持多种数据存储类型,满足复杂数据结构的存储需求。它包括基本数据类型(如 Number、String、Boolean、Date)、对象(简单和嵌套对象)、数组、Blob(用于二进制数据如图像和视频)、ArrayBuffer 和 Typed Arrays(处理二进制数据)、结构化克隆(支持 Map 和 Set 等复杂对象),以及 JSON 数据。尽管不直接支持非序列化数据(如函数和 DOM 节点),但可以通过转换实现存储。开发者应根据具体需求选择合适的数据类型,以优化性能和使用体验。
|
14天前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—异常断电导致Oracle数据库数据丢失的数据恢复案例
Oracle数据库故障: 机房异常断电后,Oracle数据库启库报错:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。数据库没有备份,归档日志不连续。用户方提供了Oracle数据库的在线文件,需要恢复zxfg用户的数据。 Oracle数据库恢复方案: 检测数据库故障;尝试挂起并修复数据库;解析数据文件。
|
15天前
|
存储 数据挖掘 数据库
服务器数据恢复—raid磁盘故障导致数据库数据损坏的数据恢复案例
存储中有一组由3块SAS硬盘组建的raid。上层win server操作系统层面划分了3个分区,数据库存放在D分区,备份存放在E分区。 RAID中一块硬盘的指示灯亮红色,D分区无法识别;E分区可识别,但是拷贝文件报错。管理员重启服务器,导致离线的硬盘上线开始同步数据,同步还没有完成就直接强制关机了,之后就没有动过服务器。
|
18天前
|
SQL Oracle 关系型数据库
Oracle数据库管理:从入门到精通
表(Table):表是Oracle数据库中存储数据的基本结构单元,由行(Row)和列(Column)组成。每行代表一个记录,每列代表一个字段。 SQL(Structured Query Language):SQL是Oracle数据库的核心语言,用于与数据库交互,执行查询、插入、更新和删除等操作。 数据库实例与数据库:在Oracle中,数据库实例是一组后台进程和内存结构,用于管理数据库并提供服务。而数据库则是数据的物理存储,包括数据文件、控制文件、联机日志和参数文件等。
42 0
|
19天前
|
存储 数据库 Python
python的对象数据库ZODB的使用(python3经典编程案例)
该文章介绍了如何使用Python的对象数据库ZODB来进行数据存储,包括ZODB的基本操作如创建数据库、存储和检索对象等,并提供了示例代码。
22 0