MSSQL

效果:

创建带有事物的存储过程:

use sales  --指定数据库
 
create table bb  --创建bb 这个表
(
    ID int not null primary key ,--账号
    Moneys money --转账金额
)
 
--bb表里插入两条数据
insert into bb values('1',2000)  --账户 1 里有2000元
insert into bb values('2',3000)  --账户 2 里有3000元
go
 
 
 
 
 
if(exists(select * from sys.objects where name='proc_bb')) --如果存储这条存储过程存在则先删除
drop  proc Proc_bb
go
 
create proc Proc_bb  --创建名字为Proc_bb的存储过程 带3个参数
(
    @fromID int,  --转出账户
    @toID int,    --接收转账的账户 
    @momeys money --转账金额
)
as
begin  tran --开始执行事务
 
update bb set Moneys=Moneys-@momeys where ID=@fromID  ---执行的第一个操作,转账 原来的金额-转账的金额
 
update bb set Moneys=Moneys+@momeys where ID=@toID --执行第二个操作,接受转账  原来的的金额+转账的金额
 
if @@ERROR<>0 --判断  如果两条语句有任何一条出现错误。(如果前面的SQL 语句执行没有错误,则返回0)
begin
rollback tran --开始执行事务的回滚,恢复转账开始之前的状态
return 0
end
 
else  --如果两个语句都执行成功
begin
commit tran --执行这个事务的操作
end
go
 
 
 
exec Proc_bb 1,2 ,2000  --执行这条存储过程;  转账账户为 1  接收账户为  2  转账的金额为 2000元

 

前端代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="用户激活.WebForm2" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    转账账户:<asp:TextBox ID="ToID" runat="server"></asp:TextBox></br>
    接收账户:<asp:TextBox ID="FromID" runat="server"></asp:TextBox></br>
    转账金额:<asp:TextBox ID="Money" runat="server"></asp:TextBox></br>
    转账是否成功:<asp:Label ID="Msg" runat="server" Text=""></asp:Label></br>
 
    <asp:Button ID="Button1" runat="server" Text="提交转账" onclick="Button1_Click" />
    </form>
</body>
</html>

  

后端代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.SqlClient;
 
namespace 用户激活
{
    public partial class WebForm2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
 
        }
 
        protected void Button1_Click(object sender, EventArgs e)
        {
            string connStr=ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    //SqlParameter sqlParameter=new SqlParameter();
                    SqlParameter [] sqlParameters={
                                                     new SqlParameter("@toID",ToID.Text.Trim()),
                                                     new SqlParameter("fromID",FromID.Text.Trim()),
                                                     new  SqlParameter("@money",Money.Text.Trim())
                                                  
                                                 };
 
                    cmd.CommandText = "exec Proc_bb @toID, @fromID, @money";
                    cmd.Parameters.AddRange(sqlParameters);
 
                    int i= cmd.ExecuteNonQuery();
 
                    if (i > 0)
                    {
                        Msg.Text = "转账成功";
                    }
                    else
                    {
                        Msg.Text = "转账失败";
                    }
                     
                }
            }
        }
    }
}

 

原文地址:https://www.cnblogs.com/KTblog/p/4622199.html