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

先安装一下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 + "条操作成功");
    }
}

原文发布于微信公众号 - 我为Net狂(dotNetCrazy)

原文发表时间:2016-02-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏晓晨的专栏

.NET Core 开源工具 IPTools - 快速查询 IP 地理位置、经纬度信息

快速查询中国IP地址信息,包含国家、省份、城市、和网络运营商。非中国IP只支持查询国家。

10610
来自专栏游戏杂谈

Unity项目中文字的统一管理

一款游戏在研发初期就需要考虑多语言的问题,否则后期在进行多国语言版本时就面临着巨大的成本。鉴于之前页游的经验,其它同事设计出读取Excel的方式来管理所有的文字...

14810
来自专栏飞扬的花生

C#实现Excel模板导出和从Excel导入数据

      午休时间写了一个Demo关于Excel导入导出的简单练习 1.窗体 ? 2.引用office命名空间 添加引用-程序集-扩展-Microsoft.O...

68570
来自专栏ASP.NET MVC5 后台权限管理系统

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(13)-系统日志和异常的处理③

上一节我们讲了如何捕获异常和记录日志,这一节我们讲,没有捕获的或者忘记捕获的异常包括404错误等,我们统一处理这个异常。 这一讲是利用 Application_...

31180
来自专栏菩提树下的杨过

asp.net与asp的session共享 及 asp的请求拦截

asp.net 与 asp 的session是无法直接共享的(底层的处理dll也不一样),要想互通session,只能用变通的办法: 一、asp.net -> ...

27170
来自专栏Porschev[钟慰]的专栏

前台JS(Jquery)调用后台方法 无刷新级联菜单示例

前台用AJAX直接调用后台方法,老有人发帖提问,没事做个示例 CasMenu.aspx页面: <%@ Page Language="C#" AutoEventW...

39050
来自专栏hbbliyong

C# ini文件读写类

VC中提供了API函数进行INI文件的读写操作,但是微软推出的C#编程语言中却没有相应的方法,下面是一个C# ini文件读写类, 从网上收集的,很全,就是没有对...

35360
来自专栏逸鹏说道

C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统日志查看功能

先不说如何实现,先来看看效果图: ? 读取远程的需要提供下远程的计算用户名和密码即可。 如何实现这个代码功能,请看如下代码部分: #region//获取日志文件...

35350
来自专栏c#开发者

MVC 5 Scaffolder + EntityFramework+UnitOfWork Pattern 代码生成工具集成Visual Studio 2013

MVC 5 Scaffolder + EntityFramework+UnitOfWork Pattern 代码生成工具 经过一个多星期的努力总算完成了单表,多...

470130
来自专栏哲学驱动设计

线程同步:System.Core中新的读写锁

读写锁是进程同步中经常使用的锁。 在System.Core中ReaderWriterLockSlim类比较好用,它是基于写优先策略的。它还支持从读锁升级到写锁,...

22070

扫码关注云+社区

领取腾讯云代金券