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

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

完整Demo:http://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,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ride上点击用例不能显示edit信息_接口测试平台代码实现61: 多接口用例1

终于又序更上了&#xff0c;原谅最近作者几天事情不断。按照我们之前的计划&#xff0c;需要迅速开启很重要的核心多用例接口。首先&#xff0c;我们要确定&#xff0c;这个功能的大体设计。就放在在我们的页面 用例库 中&#xff1a;所以也就是我们很久之前就创建好的P_cases.…

MUI - 预加载

打开详情页回到顶部:document.body.scrollTop document.documentElement.scrollTop 0;方式一&#xff1a;preload一次仅能预加载一个页面&#xff08;除非循环&#xff09; var subWebview mui.preload({url: examples/accordion.html,id: template_sub,top: styles: {48 …

Bash : 索引数组

Bash 提供了两种类型的数组&#xff0c;分别是索引数组(indexed array)和关联数组(associative array)。本文主要介绍索引数组的基本用法。 索引数组的基本特点 Bash 提供的数组都是一维数组。任何变量都可以用作索引数组。通过 declare 关键字可以显式的声明一个索引数组。数组…

Python 第三方模块之 smtplib

1 python对SMTP的支持 SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;是简单传输协议&#xff0c;它是一组用于用于由源地址到目的地址的邮件传输规则。 python中对SMTP进行了简单的封装&#xff0c;可以发送纯文本邮件、HTML邮件以及带附件的邮件。两个核心模块…

Node.js 使用jQuery取得Nodejs http服务端返回的JSON对象示例

server.js代码&#xff1a; // 内置http模块&#xff0c;提供了http服务器和客户端功能&#xff08;path模块也是内置模块&#xff0c;而mime是附加模块&#xff09; var httprequire("http");// 创建服务器,创建HTTP服务器要调用http.createServer()函数&#xff0c…

svg 动画_根据AI导出的SVG path制作SVG线条动画

点击右上方红色按钮关注“web秀”&#xff0c;让你真正秀起来前言首先祝大家2019新年快乐&#xff0c;万事大吉&#xff0c;猪事顺利&#xff0c;阖家欢乐。前面文章SVG 线条动画基础入门知识学习到了基础知识&#xff0c;现在来给大家讲讲如何制作SVG 制作复杂图形线条动画。假…

读书笔记2013第3本:《无价》

《无价》这本书是过年前买的&#xff0c;网络书店上写着“老罗推荐”&#xff0c;想着好像是在老罗哪一年的演讲里听过这本书&#xff0c;在豆瓣上评分7.9。读书是为了产生行动&#xff0c;读书时要提的4个问题&#xff0c;1&#xff09;这本书主要在谈些什么&#xff1f;2&…

Linux下的程序调试——GDB

无论是多么优秀的程序员&#xff0c;都难以保证自己在编写代码时不会出现任何错误&#xff0c;因此调试是软件开发过程中的一个必不可少的 组成部分。当程序完成编译之后&#xff0c;它很可能无法正常运行&#xff0c;或者会彻底崩溃&#xff0c;或者不能实现预期的功能。此时如…

圆锥曲线万能弦长公式_2020高考数学50条秒杀型公式与方法

考试马上就要到了&#xff0c;学姐整理了高考数学50条秒杀型公式和方法&#xff0c;希望能帮助考生们更好地攻克数学难关&#xff01;高考数学秒杀公式与方法一1&#xff0c;适用条件&#xff1a;[直线过焦点]&#xff0c;必有ecosA(x-1)/(x1)&#xff0c;其中A为直线与焦点所在…

Python 内置模块之 logging

日志的级别和适用情况 级别适用情况DEBUG详细信息&#xff0c;通常只在诊断问题时对其感兴趣INFO确认工作正常WARNING表示发生了意料之外的事或者在不远的将来会有问题&#xff08;比如磁盘空间低&#xff09;。软件依然正常工作ERROR由于一个更加严重的问题&#xff0c;软件不…

数据结构与算法 Python语言描述 笔记

数据结构 线性表包括顺序表和链表&#xff0c;python的list是顺序表&#xff0c;链表一般在动态语言中不会使用。不过链表还是会出现在各种算法题中。 链表 link list 单链表 逆转链表&#xff1a; leetcode 206双链表循环单链表字符串 string 有一个重要的点就是字符串的匹配问…

Flask 跨域问题

一、什么是跨域 跨域是指&#xff1a;浏览器A从服务器B获取的静态资源&#xff0c;包括Html、Css、Js&#xff0c;然后在Js中通过Ajax访问C服务器的静态资源或请求。即&#xff1a;浏览器A从B服务器拿的资源&#xff0c;资源中想访问服务器C的资源。 同源策略是指&#xff1a;…

1.3 使用电脑测试MC20的电话语音功能

需要准备的硬件 MC20开发板 1个https://item.taobao.com/item.htm?id562661881042GSM/GPRS天线 1根https://item.taobao.com/item.htm?id531979567261IPEX接口转SMA接口转接线 1根https://item.taobao.com/item.htm?id531979903836GPS有源天线 1根https://item.taobao.com/i…

前端之 AJAX

AJAX参数详细列表 参数名类型描述urlString(默认: 当前页地址) 发送请求的地址。typeString(默认: "GET") 请求方式 ("POST" 、 "GET")。注意&#xff1a;其它 HTTP 请求方法&#xff0c;如 PUT 和 DELETE &#xff0c;但仅部分浏览器支持。tim…

html5--1.18 div元素与布局

1.18 div元素与布局 1.元素的分类2.div元素与布局 1、元素的分类 块元素:主要特征是会产生换行效果&#xff0c;自动与其他元素分离成两行&#xff1b;通常可以作为容器在内部添加其他元素。已经学过的块元素有&#xff1a; h1~h6;hr;ul;ol;p;table......... 内联元素:不会产生…

五个优秀的视频格式转换工具

电脑、手机、DVD播放机、PSP……这么多的东西都可以播放视频&#xff0c;但是视频格式又千差万别的&#xff0c;我们该怎么办&#xff1f;这里&#xff0c;我们介绍五个功能强大且易于使用的媒体转换器&#xff0c;用于转换不同类型的视频文件。 一、Super (Windows) Super是一…

艾宾浩斯记忆表格excel_Excel全年学习复习计划表(艾宾浩斯遗忘曲线)

最近准备考在职博士&#xff0c;刷刷学历&#xff0c;不得不又拿起必考的英语来&#xff0c;发现由于这几年敲代码&#xff0c;日常生活词汇忘了很多&#xff0c;只好买本考博词汇背诵&#xff0c;不过三十而立的人背起来确实费劲了&#xff0c;所以开始寻找好的背诵方法。又想…

七个帮助你处理Web页面层布局的jQuery插件

1.UI.Layout jQuery UI布局插件官方网站&#xff1a;http://layout.jquery-dev.com/index.cfm使用大小可折叠的嵌套面板和大量选项创建高级UI布局。布局可以创建任何你想要的UI外观; 从简单的标题或侧边栏到具有工具栏&#xff0c;菜单&#xff0c;帮助面板&#xff0c;状态栏…

前端之 CSS

CSS介绍 CSS&#xff08;Cascading Style Sheet&#xff0c;层叠样式表)定义如何显示HTML元素。 当浏览器读到一个样式表&#xff0c;它就会按照这个样式表来对文档进行格式化&#xff08;渲染&#xff09;。 CSS语法 CSS实例 每个CSS样式由两个组成部分&#xff1a;选择器…

在Window下编译OpenH323

前言&#xff1a; 本文只提供VC6.0的编译说明&#xff0c;如果想知道VC.Net下的编译过程请参看原文。 原文 &#xff1a; http://www.voxgratia.org/docs/pwlib_windows.html#msvc_headers 作者 &#xff1a;Craig Southeren 翻译 &#xff1a; Richard 原文…