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 + "条操作成功");
                }
            }

事物的使用:

先看看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();
                        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);
                }
            }
复制代码

 

目录
相关文章
|
安全 Windows
Win10/Win11如何获取最高管理员权限
Win10/Win11如何获取最高管理员权限
5055 0
|
5月前
|
人工智能 前端开发 测试技术
Agent 时代的生产力悖论:当协作本身成为最大的瓶颈
文章内容基于作者个人技术实践与独立思考,旨在分享经验,仅代表个人观点。
Agent 时代的生产力悖论:当协作本身成为最大的瓶颈
|
7月前
|
人工智能 文字识别 内存技术
阿里云Tokens如何收费?免费千万Tokens领取及亿万AI大模型扶持计划申请入口
阿里云Tokens按输入/输出分别计费,价格因模型而异(如Qwen-Turbo:0.0003/0.0006元/千Tokens)。新用户开通百炼平台可免费领7000万Tokens(各模型享100万额度),企业认证还可申领万亿Tokens扶持及2000元券,免费Tokens申请链接:https://t.aliyun.com/U/fPVHqY
789 6
|
5月前
|
人工智能 弹性计算 数据库
阿里云首购特惠活动解析:新用户可参与轻量应用服务器抢购,老用户同享特惠云服务器
2026年阿里云新老用户首购特惠活动解析:新用户可享轻量应用服务器抢购价,2核2G/200M/40G ESSD仅38元/年,2核4G配置9.9元/月起,支持OpenClaw镜像一键部署AI助理。老用户同享99计划长效特惠:e实例99元/年、u1实例199元/年,新购续费同价至2027年3月。此外,u2i实例享3折、九代实例6.4折等首购优惠。
|
6月前
|
人工智能 API Windows
2026 最强 OpenClaw 来了!安装简单到离谱(包含新安装包)
2026 最新版 OpenClaw 强势更新,功能更全、运行更稳,汉化彻底不残缺。最惊喜的是安装极度简化,无需折腾环境,点几下就能装好,效率直接拉满。
|
7月前
|
存储 自然语言处理 Python
Python入门教程(新手必看)(终)
教程来源 https://app-acda5zfcddz5.appmiaoda.com 从控制流(if/while/for)、四大数据结构(列表、元组、字典、集合),到函数定义与作用域、文件读写、异常处理、模块导入,最后通过学生成绩管理系统实战整合所学,强调动手实践,助力初学者扎实入门。
|
7月前
|
自然语言处理 数据挖掘 BI
Python 生成 PowerPoint 演示文件图表教程
本文教你用Python(python-pptx库)自动化生成PPT图表:从安装配置、创建柱状图/折线图/饼图/散点图,到读取Excel数据、批量制图、美化样式与排版。告别重复手工操作,提升运营、财务、咨询等岗位的报表效率。(239字)
1090 2
|
JSON 搜索推荐 API
小红书笔记列表API数据解析(附代码)
本内容介绍如何利用小红书开放平台的笔记列表API,批量获取与关键词或用户相关的笔记数据,包括标题、封面图、互动数据等。接口支持按关键词分页查询及排序筛选,适用于内容聚合与用户分析。附Python示例代码,演示通过GET请求调用API的方法,并处理返回的JSON数据。
1206 4
|
JSON 监控 API
从0到1掌握京东API:商品列表获取技巧与避坑指南
京东商品列表API是京东开放平台的核心接口,支持按类目、价格、销量等多条件筛选,实时获取商品基础信息、价格、库存及促销数据。采用HTTPS协议,JSON格式返回,适用于竞品分析与价格监控。支持分页,通过MD5签名认证,保障数据安全。
数字化云上博物馆,打造地质旅游新趋势!
地质旅游是以观赏和科研地质景观为目的的新兴旅游形式。为推动地质资源的保护与展示,“十四五”规划倡导“互联网+旅游”,通过数字化手段提升地质资源的展示效果。我们推出的数字化云上博物馆解决方案,利用数字技术构建虚拟空间,以高清图片、3D模型、VR/AR等技术,实现地质资源的全方位展示与互动体验,突破时空限制,让用户足不出户即可云游地质遗迹,享受地理之美。

热门文章

最新文章