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

动态类型:

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

多映射:

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

 多返回值:

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

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

  1. using (SqlConnection conn = new SqlConnection(connStr))
  2. {
  3. conn.Open();
  4. //增
  5. 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 = "毒逆天" });
  6.  
  7. //改
  8. //int count = conn.Execute("update Article set Title=@title where Id=@id", new { title = "么么哒", id = 274 });
  9. if (count > 0)
  10. {
  11. Console.WriteLine(count + "条操作成功");
  12. }
  13. }

存储过程:

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

事物的使用:

先看看ADO.Net怎么用的

  1. using (SqlConnection conn = new SqlConnection(connStr))
  2. {
  3. string sql = @"insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
  4. insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
  5. insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
  6. insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 999999999999999999999999)
  7. insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
  8. insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
  9. ";
  10. using (SqlCommand cmd = new SqlCommand(sql, conn))
  11. {
  12. conn.Open();
  13. cmd.Transaction = conn.BeginTransaction();
  14. try
  15. {
  16. int i = cmd.ExecuteNonQuery();
                  cmd.Transaction.Commit();
  17. Console.WriteLine(i);
  18. }
  19. catch (Exception ex)
  20. {
  21. cmd.Transaction.Rollback();
  22. Console.WriteLine(ex);
  23. }
  24. }
  25. }

再看看Dapper的

  1. using (SqlConnection conn = new SqlConnection(connStr))
  2. {
  3. string sql = @"insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
  4. insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
  5. insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
  6. insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 9999999999999999999)
  7. insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
  8. insert into SeoTKD values(N'毒逆天,测试', N'测试测试测试', 1)
  9. ";
  10. conn.Open();
  11. var transaction = conn.BeginTransaction();
  12. try
  13. {
  14. int i = conn.Execute(sql, transaction: transaction);
  15. transaction.Commit();
  16. Console.WriteLine(i);
  17. }
  18. catch (Exception ex)
  19. {
  20. transaction.Rollback();
  21. Console.WriteLine(ex);
  22. }
  23. }

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

  1. Hibernate操作指南-实体与常用类型的映射以及基本的增删改查(基于注解)

  2. Django 06 Django模型基础1(ORM简介、数据库连接配置、模型的创建与映射、数据的增删改查)

    Django 06 Django模型基础1(ORM简介.数据库连接配置.模型的创建与映射.数据的增删改查) 一.ORM系统 #django模型映射关系 #模型类-----数据表 #类属性-----表字 ...

  3. entity framework 新手入门篇(2)-entity framework基本的增删改查

    经过前两节的简单描述,终于可以进入entity framework的使用部分了.本节将对entity framework原生的增删改查进行讲解. 承接上面的部分,我们有一个叫做House的数据库,其中 ...

  4. Spring Boot入门系列(六)如何整合Mybatis实现增删改查

    前面介绍了Spring Boot 中的整合Thymeleaf前端html框架,同时也介绍了Thymeleaf 的用法.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/z ...

  5. django--orm对象关系映射之常用的增删改查

    1.查询表里所有数据 book=models.Book.objects.all() 2.条件查询 book = models.Book.objects.filter(id=1).first() # 查 ...

  6. 快速入门GreenDao框架并实现增删改查案例

    大家的项目中不可避免的使用到SQLite,为此我们要花费心思编写一个增删改查框架.而一个好的ORM框架则能够给我们带来极大的方便,今天给大家讲解一个非常火热的ORM-GreenDao. 基本概念 Gr ...

  7. MybatisMapper 动态映射(增删改查)

    //接口内容以及注意事项 package cn.jy.mybatis.mapper; import java.util.List; import cn.jy.mybatis.pojo.User; pu ...

  8. 由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序

    异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 今天帮群友整理Dapper基础教程的时候手脚快了点,然后遇到了一个小问题,Dapp ...

  9. MongoDB入门(介绍、安装、增删改查)

    文章作者公众号bigsai,已收录在回车课堂,如有帮助还请不吝啬点个赞赞支持一下! 课程导学 大家好我是bigsai,我们都学过数据库,但你可能更熟悉关系(型)数据库例如MySQL,SQL SERVE ...

随机推荐

  1. 读书笔记:《HTML5开发手册》--HTML5新的结构元素

    读书笔记:<HTML5开发手册> (HTML5 Developer's CookBook) 虽然从事前端开发已有很长一段时间,对HTML5标签也有使用,但在语义化上面理解还不够清晰.之前在 ...

  2. socket读写返回值的处理

    在调用socket读写函数read(),write()时,都会有返回值.如果没有正确处理返回值,就可能引入一些问题 总结了以下几点 1当read()或者write()函数返回值大于0时,表示实际从缓冲 ...

  3. Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)

    背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...

  4. 探索C#之6.0语法糖剖析

    阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...

  5. 使用etree.HTML的编码问题

    title: 使用etree.HTML的编码问题 date: 2015-10-07 17:56:47 categories: [Python] tags: [Python, lxml, Xpath] ...

  6. 猖獗的假新闻:2017年1月1日起iOS的APP必须使用HTTPS

    一.假新闻如此猖獗 刚才一位老同事 打电话问:我们公司还是用的HTTP,马上就到2017年了,提交AppStore会被拒绝,怎么办? 公司里已经有很多人问过这个问题,回答一下: HTTP还是可以正常提 ...

  7. 安卓易学,爬坑不易——腾讯老司机的RecyclerView局部刷新爬坑之路

    针对手游的性能优化,腾讯WeTest平台的Cube工具提供了基本所有相关指标的检测,为手游进行最高效和准确的测试服务,不断改善玩家的体验.目前功能还在免费开放中. 点击地址:http://wetest ...

  8. JQuery easyUI DataGrid 创建复杂列表头(译)

    » Create column groups in DataGrid The easyui DataGrid has ability to group columns, as the followin ...

  9. Eclipse出现"Running Android Lint has encountered a problem"解决方案

    安装eclipse for android 时候的错误记录,转载自:http://blog.csdn.net/chenyufeng1991/article/details/47442555 (1)打开 ...

  10. 监控 SQL Server (2005/2008) 的运行状况

    Microsoft SQL Server 2005 提供了一些工具来监控数据库.方法之一是动态管理视图.动态管理视图 (DMV) 和动态管理函数 (DMF) 返回的服务器状态信息可用于监控服务器实例的 ...