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,一经查实,立即删除!

相关文章

Linux 状态命令之磁盘状态 iostat

Linux系统中的iostat是I/O statistics&#xff08;输入/输出统计&#xff09;的缩写&#xff0c;iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况&#xff0c;同时也会汇报出CPU使用情况。同vmstat一样&#xff0c;iostat也有一个弱点&#xff0c;就…

GDB十分钟教程

GDB十分钟教程 作者: liigo 原文链接: http://blog.csdn.net/liigo/archive/2006/01/17/582231.aspx 日期: 2006年1月16日 本文写给主要工作在Windows操作系统下而又需要开发一些跨平台软件的程序员朋友&#xff0c;以及程序爱好者。 GDB是一个由GNU开源组织发布的、UNIX/LI…

课后作业-阅读任务-阅读提问-3

1.如果两个人合作的始终达不到规范阶段该怎如何处理&#xff1f; 2. 逻辑和界面设计要注意哪些因素&#xff1f;转载于:https://www.cnblogs.com/fhycm/p/7866548.html

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

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

黑客攻防专题八:21种RING的提权方法

好多都没有成功&#xff0c;还是发来看看&#xff0c;看看思路&#xff0c;呵呵 以下全部是本人提权时候的总结 很多方法至今没有机会试验也没有成功&#xff0c;但是我是的确看见别人成功过的。本人不才&#xff0c;除了第一种方法自己研究的&#xff0c;其他的都是别人的经验…

Linux 状态命令之内存状态 free

简介 free指令会显示内存的使用情况&#xff0c;包括实体内存&#xff0c;虚拟的交换文件内存&#xff0c;共享内存区段&#xff0c;以及系统核心使用的缓冲区等。 语法 free [-bkmotV][-s <间隔秒数>]参数说明&#xff1a;-b  以Byte为单位显示内存使用情况。-k  以…

SpringMVC在使用Jackson2时关于日期类型格式化的问题

*本例程序使用Jackson2.9.0&#xff0c;jackson1.x的处理方式稍稍有些不同。 在基于Spring&SpringMVC的Web项目中&#xff0c;我们常使用Jackson(1.x/2.x)来增加程序对Json格式的数据的支持。 因此&#xff0c;在实际应用中有个常见的需求&#xff1a;日期的格式化。 假设&…

GDB 使用——Linux C编程

简述 一 列文件清单 二&#xff1a;执行程序 三&#xff1a;显示数据 四&#xff1a;断点(breakpoint) 五&#xff0e;断点的管理 六&#xff0e;变量的检查和赋值 七. 单步执行 八&#xff0e;函数的调用 九&#xff0e;机器语言工具 …

python拨号_python 拨号代码(win10 系统亲测有效)

# -*- coding: utf-8 -*-import win32rasimport time,osdef Connect(dialname, account, passwd):dial_params (dialname, , , account, passwd, )return win32ras.Dial(None, None, dial_params, None)def DialBroadband():dialname u宽带连接 #just a nameaccount u059291…

HP服务器引导盘下载地址

HP SmartStart CD 8.7 x32版本的下载地址为&#xff1a;http://ftp.hp.com/pub/softlib2/software1/cd/p1040463476/v63549/smartstart-8.70-0-x86.zip HP SmartStart CD 8.7 x32版本支持以下机型&#xff1a; HP ProLiant ML 和 DL 300、500 和 700 系列以及 HP ProLiant BL S…

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 …

python 分类变量xgboost_【转】XGBoost参数调优完全指南(附Python代码)

xgboost入门非常经典的材料&#xff0c;虽然读起来比较吃力&#xff0c;但是会有很大的帮助&#xff1a;英文原文链接:https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/

用 GDB 调试Linux程序及有用技巧

用 GDB 调试Linux程序及有用技巧(转) armlinux 2008-06-19 10:48 阅读91 评论0 字号&#xff1a; 大大 中中 小小 GNU的调试器称为gdb&#xff0c;该程序是一个交互式工具&#xff0c;工作在字符模式。在 X Window 系统中&#xff0c;有一个gdb的前端图形工具…

Bash : 索引数组

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

Flask 第三方组件之 login

在了解使用Flask来实现用户认证之前&#xff0c;我们首先要明白用户认证的原理。假设现在我们自己去实现用户认证&#xff0c;需要做哪些事情呢&#xff1f; 首先&#xff0c;登录。用户能够输入用户名和密码进行登录&#xff0c;所以需要网页和表单&#xff0c;实现用户输入和…

Zookeeper客户端Curator使用详解

http://www.jianshu.com/p/70151fc0ef5dZookeeper客户端Curator使用详解 简介 Curator是Netflix公司开源的一套zookeeper客户端框架&#xff0c;解决了很多Zookeeper客户端非常底层的细节开发工作&#xff0c;包括连接重连、反复注册Watcher和NodeExistsException异常等等。Pat…

python argparse nargs_Python | 使用argparse解析命令行参数

今天是Python专题第27篇文章&#xff0c;我们来聊聊Python当中的命令行参数工具argparse。命令行参数工具是我们非常常用的工具&#xff0c;比如当我们做实验希望调节参数的时候&#xff0c;如果参数都是通过硬编码写在代码当中的话&#xff0c;我们每次修改参数都需要修改对应…

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…

linux下gdb单步调试

用 GDB调试程序 GDB 概述 ———— GDB 是 GNU开源组织发布的一个强大的 UNIX下的程序调试工具。或许&#xff0c;各位比较喜欢那种图形界面方式的&#xff0c;像 VC、 BCB等 IDE的调试&#xff0c;但如果你是在 UNIX平台下做软件&#xff0c;你会发现 GDB这个调试工具有比 V…