排名
1
文章
860
粉丝
112
评论
163
.net core自定义项目模板,创建自己的模板项目,使用命令行创建模板项目
尘叶心繁 : 可以可以讲真的我都想弄个模板
net core webapi post传递参数
庸人 :
确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
.net webapi 返回需要的字段,忽略某些字段,修改字段名等
雨雨雨雨雨辰 : 已精
.net webapi 返回需要的字段,忽略某些字段,修改字段名等
雨雨雨雨雨辰 :
疯狂反射
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术

事务:把所有的操作当中一个整体,要么全部成功,要么全部失败
一旦开启了事务所有的操作都是临时的,你可以选择提交或者回滚
提交事务:全部成功
回滚事务:全部失败
事务特性(ACID):
事务具有原子性,一致性,隔离性,持久性(ACID)
A 原子性:事务必须是一个自动工作的单元,要么全部执行,要么全部不执行。
C 一致性:事务把数据库从一个一致状态带入到另一个一致状态,事务结束的时候,所有的内部数据都是正确的。
I 隔离性:并发多个事务时,一个事务的执行不受其他事务的影响。
D 持久性:事务提交之后,数据是永久性的,不可再回滚,不受关机等事件的影响。
事务的步骤:
1:开启事务 begin trans/transaction 事务名称
2:提交事务 commit trans/transaction 事务名称
3: 回滚事务 rollback trans/transaction 事务名称
出现异常事务会自动回滚
来简单模拟一个银行转账的例子:
测试表:
- create Table Account
- (
- Id int primary key identity(1,1),
- MyMoney int,
- AccountNumber nvarchar(64)
- )
-
- select *from Account
-
- insert Account values(1000,'60023')
- insert Account values(1000,'60025')
-
- update Account set MyMoney =1000
方法1:
- alter proc proc_transmoney(@myAccountNumber nvarchar(64),@outAccountNumber nvarchar(64),@money int)
- as
- begin
- begin tran trans_money
-
- begin try
-
- if(@money=0)
- begin
- print('转账金额必须大于0')
- commit tran trans_money
- return
- end
-
-
- --验证转入账号是否存在
- declare @count int
- select @count = COUNT(*) from Account where AccountNumber = @myAccountNumber
- if(@count=0)
- begin
- print('你的账号输入错误,转账失败')
- --提交事务(只是为了事务完整)
- commit tran trans_money
- return
- end
-
- select @count = COUNT(*) from Account where AccountNumber = @outAccountNumber
- if(@count=0)
- begin
- print('对方账号输入错误,转账失败')
- --提交事务(只是为了事务完整)
- commit tran trans_money
- return
- end
-
- --验证余额
- declare @lastMoney int
- select @lastMoney = MyMoney from Account where AccountNumber = @myAccountNumber
- if(@money>@lastMoney)
- begin
- print('你的余额不足,转账失败。你的余额为:'+cast(@lastMoney as varchar))
- commit tran trans_money
- return
- end
-
-
-
- update Account set MyMoney = MyMoney-@money where AccountNumber = @myAccountNumber
- update Account set MyMoney = MyMoney+@money where AccountNumber =@outAccountNumber
- commit tran trans_money
- print('转账成功')
- end try
-
- --当异常出现的时候会执行
- begin catch
- print('转账出现错误,转账失败')
- --回滚事务
- rollback tran trans_money
- end catch
- end
方法2:
- alter proc proc_transmoney(@myAccountNumber nvarchar(64),@outAccountNumber nvarchar(64),@money int,@num1 nvarchar(64) out)
- as
- begin
- begin tran trans_money
-
- begin try
-
- if(@money=0)
- begin
- print('转账金额必须大于0')
- commit tran trans_money
- return
- end
-
- --验证转入账号是否存在
- declare @count int
-
- --验证余额
- declare @lastMoney int
- select @lastMoney = MyMoney from Account where AccountNumber = @myAccountNumber
- if(@money>@lastMoney)
- begin
-
- set @num1=('你的余额不足,转账失败。你的余额为:'+cast(@lastMoney as varchar))
- commit tran trans_money
- return
- end
-
- update Account set MyMoney = MyMoney-@money where AccountNumber = @myAccountNumber
- if(@@ROWCOUNT=0)
- begin
- set @num1=('你的账号输入错误,转账失败')
- rollback tran trans_money
- return
- end
-
- update Account set MyMoney = MyMoney+@money where AccountNumber =@outAccountNumber
-
- if(@@ROWCOUNT=0)
- begin
- set @num1=('对方的账号输入错误,转账失败')
- rollback tran trans_money
- return
- end
-
- commit tran trans_money
- set @num1=('转账成功')
- end try
-
- --当异常出现的时候会执行
- begin catch
- set @num1=('转账出现错误,转账失败')
- --回滚事务
- rollback tran trans_money
- end catch
- end
c#执行这个存储过程,这里就简单的直接执行的:
- static void Main(string[] args)
- {
- SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=123456;database=oa");
- conn.Open();
-
- SqlCommand com = new SqlCommand();
- //给命令指定一个连接对象
- com.Connection = conn;
-
- //设置命令的类型为存储过程
- com.CommandType = System.Data.CommandType.StoredProcedure;
- //指定存储过程的名字
- com.CommandText = "proc_transmoney";
-
- Console.WriteLine("请输入你的账号");
- string myAccount = Console.ReadLine();
-
- //你的账号
- SqlParameter myAccountNumber = new SqlParameter("myAccountNumber", myAccount);
- com.Parameters.Add(myAccountNumber);
-
- Console.WriteLine("请输入对方的账号");
- string outAccount = Console.ReadLine();
-
- //对方的账号
- com.Parameters.AddWithValue("outAccountNumber", outAccount);
- //转账的金额
- Console.WriteLine("请输入转账的金额");
- string myMoney = Console.ReadLine();
- com.Parameters.AddWithValue("money", myMoney);
-
-
-
- SqlParameter sqlParameter = new SqlParameter();
- //参数类型
- sqlParameter.SqlDbType = System.Data.SqlDbType.NVarChar;
-
- //指定参数大小
- sqlParameter.Size = 256;
-
- //参数方向,输出还是输入
- sqlParameter.Direction = System.Data.ParameterDirection.Output;
-
- sqlParameter.ParameterName = "num1";
-
- com.Parameters.Add(sqlParameter);
-
- //执行
- com.ExecuteReader();
- Console.WriteLine(sqlParameter.Value);
- }
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)
评价