一  dapper使用事务

  string sql1 = "insert into UserInfo values('user8',27,'s')";
string sql2 = "insert into RoleInfo values('新角色2')";
conn.Open();//在dapper中使用事务,需要手动打开连接
IDbTransaction transaction = conn.BeginTransaction();//开启一个事务
try
{
conn.Execute(sql2, null, transaction);
conn.Execute(sql1, null, transaction); transaction.Commit();//都执行成功时提交
Console.WriteLine("Sucess");
}
catch (Exception ex)
{ transaction.Rollback();//只要有一条执行失败,执行回滚
Console.WriteLine("Fail");
}
conn.Close();

二  dapper执行存储过程

1、有输入输出参数的存储过程

(1)创建存储过程

--插入新用户的存储过程,用户名存在就不插入
create proc sp_insertUser
@username nvarchar(50),
@roleid int ,
@age int,
@count int out
as
begin
declare @c int;
select @c=COUNT(*) from UserInfo where UserName=@username;
if(@c!=0)
set @count =0;
else
begin
insert into UserInfo values(@username,@age,@roleid);
set @count=1;
end
end
GO

(2)c#中使用dapper执行

         //设置参数 (input为默认参数类型,可以不写的)
DynamicParameters dp = new DynamicParameters();
dp.Add("@username", "newuser", DbType.String, ParameterDirection.Input, );
dp.Add("@age", , DbType.Int16, ParameterDirection.Input);
dp.Add("@roleid", , DbType.Int16, ParameterDirection.Input);
dp.Add("@count", , DbType.Int16, ParameterDirection.Output); //执行存储过程
var res = conn.Execute("sp_insertUser", dp, null, null, CommandType.StoredProcedure);
int count = dp.Get<int>("@count");//获取output参数的值

2、无参返回多个结果集

(1)创建存储过程

--获取用户和角色表中的所有数据
create procedure sp_getUsesAndRoles
as
begin
select * from UserInfo;
select * from RoleInfo;
end

(2)c#中使用dapper执行

      //获取多个结果集
Dapper.SqlMapper.GridReader res = conn.QueryMultiple("sp_getUsesAndRoles", null, null, null, CommandType.StoredProcedure); //read方法获取user和roles
IEnumerable<UserInfo> users = res.Read<UserInfo>();
IEnumerable<RoleInfo> roles = res.Read<RoleInfo>();

Dapper总结(二)---事务和存储过程的更多相关文章

  1. MySQL基础(二):视图、触发器、函数、事务、存储过程

    一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 视图和上一篇学到的临时表搜索类似. ...

  2. Mysql-自带的一些功能,基本用法(视图,触发器,事务,存储过程,函数,流程控制)

    一. 视图 二. 触发器 三. 事务 四. 存储过程 五. 函数 六. 流程控制 一 .视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用 ...

  3. MySQL之视图、触发器、事务、存储过程、函数

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

  4. MySQL之视图、触发器、事务、存储过程、函数 流程控制

    MySQL之视图.触发器.事务.存储过程.函数 阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部 ...

  5. day43 数据库学习egon的博客 视图、触发器、事务、存储过程、函数

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

  6. mysql八:视图、触发器、事务、存储过程、函数

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

  7. mysql 视图,事务,存储过程,触发器

    一 视图 视图是一个虚拟表(非真实存在),是跑到内存中的表,真实表是硬盘上的表.使用视图我们可以把查询过程中的临时表摘出来,保存下来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sq ...

  8. python-day48--mysql之视图、触发器、事务、存储过程、函数

    一.视图(不推荐使用) 1).视图是一个虚拟表(非真实存在) 2).使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找 ...

  9. MySQL 第七篇:视图、触发器、事务、存储过程、函数

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

随机推荐

  1. Activiti中子流程:SubProcess,CallActiviti的区别

    子流程:SubProcess,CallActiviti的区别 https://community.alfresco.com/thread/221771-call-activiti-vs-subproc ...

  2. JavaScript 字符串与数组互转,并保持数据去重、排序功能

    var valueArr = new Array(); if( $("input[name='type']").val() != ""){ valueArr = ...

  3. Java 线程内 递归 Bug 一例

    一个线程的run方法里使用递归方法,出了Bug. private boolean ispass(String creationId){ List<Map> maps =creationSe ...

  4. 《使用swoole》

    第一 在windows系统搭建swoole环境: 首先,安装cygwin:步骤截图如下 其次,使用cygwin安装swoole: 打开cygwin的终端,进入~目录,并将swoole-src上传到~目 ...

  5. 跪求delphi 中的bitbutton 中的bmp图标

    C:\Program Files (x86)\Embarcadero\RAD Studio\11.0\Images\GlyFX

  6. python之unittest单元测试

    # unittest单元测试 import unittest from class_demo import Car class TestCar(unittest.TestCase): '''测试Car ...

  7. Django-website 程序案例系列-8 html模板文件详解

    主模板:master.html <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  8. BZOJ1861[Zjoi2006]书架——非旋转treap

    题目描述 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书,看完后放回书柜然后再拿下一本.由于这些 ...

  9. ajax 提交字符串到后台 反序列化

    MVC后台 或者 Webapi 都可以使用此方式 前台 @using (Html.BeginForm("Test","Test")) { <input t ...

  10. Codeforces Round #431 (Div. 2) B. Tell Your World

    B. Tell Your World time limit per test 1 second memory limit per test 256 megabytes input standard i ...