Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示
Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下:
完整Demo:http://pan.baidu.com/s/1i3TcEzj
注 意 事 项:http://www.cnblogs.com/dunitian/p/5221058.html
平台之大势何人能挡? 带着你的Net飞奔吧!
先安装一下Dapper(建议用nuget包来管理)
连接字符串:
string connStr = "Data Source=.;Initial Catalog=DapperDB;User ID=用户名;Password=密码";
强类型:
#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
动态类型:
#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
多映射:
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);
}
}
多返回值:
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
} }
}
增删改查:(删项目里面基本上不用)
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 + "条操作成功");
}
}
存储过程:
//查询
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);
}
}
Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示的更多相关文章
- Hibernate操作指南-实体与常用类型的映射以及基本的增删改查(基于注解)
- Django 06 Django模型基础1(ORM简介、数据库连接配置、模型的创建与映射、数据的增删改查)
Django 06 Django模型基础1(ORM简介.数据库连接配置.模型的创建与映射.数据的增删改查) 一.ORM系统 #django模型映射关系 #模型类-----数据表 #类属性-----表字 ...
- entity framework 新手入门篇(2)-entity framework基本的增删改查
经过前两节的简单描述,终于可以进入entity framework的使用部分了.本节将对entity framework原生的增删改查进行讲解. 承接上面的部分,我们有一个叫做House的数据库,其中 ...
- Spring Boot入门系列(六)如何整合Mybatis实现增删改查
前面介绍了Spring Boot 中的整合Thymeleaf前端html框架,同时也介绍了Thymeleaf 的用法.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/z ...
- django--orm对象关系映射之常用的增删改查
1.查询表里所有数据 book=models.Book.objects.all() 2.条件查询 book = models.Book.objects.filter(id=1).first() # 查 ...
- 快速入门GreenDao框架并实现增删改查案例
大家的项目中不可避免的使用到SQLite,为此我们要花费心思编写一个增删改查框架.而一个好的ORM框架则能够给我们带来极大的方便,今天给大家讲解一个非常火热的ORM-GreenDao. 基本概念 Gr ...
- MybatisMapper 动态映射(增删改查)
//接口内容以及注意事项 package cn.jy.mybatis.mapper; import java.util.List; import cn.jy.mybatis.pojo.User; pu ...
- 由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序
异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 今天帮群友整理Dapper基础教程的时候手脚快了点,然后遇到了一个小问题,Dapp ...
- MongoDB入门(介绍、安装、增删改查)
文章作者公众号bigsai,已收录在回车课堂,如有帮助还请不吝啬点个赞赞支持一下! 课程导学 大家好我是bigsai,我们都学过数据库,但你可能更熟悉关系(型)数据库例如MySQL,SQL SERVE ...
随机推荐
- .Net多线程编程—System.Threading.Tasks.Parallel
System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Parallel.For,Parallel.ForEach这三个静态方法. 1 Parallel. ...
- python笔记(持续更新)
1.编译python遇到下面的编码问题: SyntaxError: Non-ASCII character '\xe9' in file E:\projects\learn.py on lin ...
- C# await和async
基础阅读:http://www.cnblogs.com/jesse2013/p/async-and-await.html 答疑阅读:http://www.cnblogs.com/heyuquan/ar ...
- JavaWeb——Servlet
一.基本概念 Servlet是运行在Web服务器上的小程序,通过http协议和客户端进行交互. 这里的客户端一般为浏览器,发送http请求(request)给服务器(如Tomcat).服务器接收到请求 ...
- Dynamics CRM 之ADFS 使用 WID 的联合服务器场
使用 WID 的联合服务器场 默认拓扑 Active Directory 联合身份验证服务 (AD FS) 是联合服务器场,使用 Windows 内部数据库 (WID). 在这种拓扑, AD FS 使 ...
- Android中的多线程断点下载
首先来看一下多线程下载的原理.多线程下载就是将同一个网络上的原始文件根据线程个数分成均等份,然后每个单独的线程下载对应的一部分,然后再将下载好的文件按照原始文件的顺序"拼接"起来就 ...
- svn常用命令
1.新建版本库 [root@localhost repos]# mkdir -p project [root@localhost repos]# svnadmin create project [ro ...
- tg2015 信息传递 (洛谷p2661)
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
- 从贝叶斯到粒子滤波——Round 1
粒子滤波确实是一个挺复杂的东西,从接触粒子滤波到现在半个多月,博主哦勒哇看了N多篇文章,查略了嗨多资料,很多内容都是看了又看,细细斟酌.今日,便在这里验证一下自己的修炼成果,请各位英雄好汉多多指教. ...
- Linux+apache+mono+asp.net安装教程
Linux+apache+mono+asp.net安装教程(CentOS上测试的) 一.准备工作: 1.安装linux系统(CentOS,这个就不多讲了) 2.下载所需软件 http-2.4.4.ta ...