Dapper总结(二)---事务和存储过程
一 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总结(二)---事务和存储过程的更多相关文章
- MySQL基础(二):视图、触发器、函数、事务、存储过程
一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 视图和上一篇学到的临时表搜索类似. ...
- Mysql-自带的一些功能,基本用法(视图,触发器,事务,存储过程,函数,流程控制)
一. 视图 二. 触发器 三. 事务 四. 存储过程 五. 函数 六. 流程控制 一 .视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用 ...
- MySQL之视图、触发器、事务、存储过程、函数
一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...
- MySQL之视图、触发器、事务、存储过程、函数 流程控制
MySQL之视图.触发器.事务.存储过程.函数 阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部 ...
- day43 数据库学习egon的博客 视图、触发器、事务、存储过程、函数
一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...
- mysql八:视图、触发器、事务、存储过程、函数
一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...
- mysql 视图,事务,存储过程,触发器
一 视图 视图是一个虚拟表(非真实存在),是跑到内存中的表,真实表是硬盘上的表.使用视图我们可以把查询过程中的临时表摘出来,保存下来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sq ...
- python-day48--mysql之视图、触发器、事务、存储过程、函数
一.视图(不推荐使用) 1).视图是一个虚拟表(非真实存在) 2).使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找 ...
- MySQL 第七篇:视图、触发器、事务、存储过程、函数
一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...
随机推荐
- 在Windows Server 2008R2中部署 AspNetCore
1.部署时,先安装运行时 https://dotnet.microsoft.com/download 2.安装vc_redist.x64 https://www.microsoft.com/en- ...
- Alpha冲刺随笔集
作业地址 项目名称:高校实验室信息化管理系统 团队成员 学号 姓名 031602636 许舒玲 031602237 吴杰婷 031602220 雷博浩 031602634 吴志鸿 181600107 ...
- React onWheel
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- ES6 Set & Map
ES6 Set & Map OK ES6 Map https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Globa ...
- python之FTP上传和下载
# FTP操作 import ftplib host = '192.168.20.191' username = 'ftpuser' password = 'ftp123' file = '1.txt ...
- BZOJ2049[Sdoi2008]洞穴勘测——LCT
题目描述 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假如 ...
- 【Linux】Centos配置ssh无密码登录
[测试环境] 刚好重新做mgr就搞下吧,主要论文好长~想多做几遍再看~ master1 192.168.13.111 master2 192.168.13.112 master3 192.168. ...
- ASP.NET MVC5使用Area区域
转载:http://www.lanhusoft.com/Article/217.html 在大型的ASP.NET mvc5项目中一般都有许多个功能模块,这些功能模块可以用Area(中文翻译为区域)把它 ...
- C# 后台访问webapi
具体在哪看见的忘记了. 异步: public static class CallWebAPI { public static async Task<string> APIPost(stri ...
- Codeforces976E Well played! 【贪心】
题目分析: 由于乘二的收获很大,所以我们可以证明乘的数一定是同一个,接着排序后依次选取,判断一下即可. 题目代码: #include<bits/stdc++.h> using namesp ...