SQL 事务 (存储过程与事务)

<1>

C# 执行SQL事务 又两种方法(本人总结的)

1.通过存储过程。 现在就演示一下通过存储过程来执行SQL事务。

2.通过C#中提供的 Transaction 。

SQL Server 事务语法

Sql server 事务的两种用法

<1>创建一个存储过程,

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 [email protected] where [email protected]  ---执行的第一个操作,转账 原来的金额-转账的金额

update bb set [email protected] where [email protected] --执行第二个操作,接受转账  原来的的金额+转账的金额

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元

在C#中执行上面这个存储过程

WebForm2.aspx.cs页面

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 = "转账失败";
                    }

                }
            }
        }
    }
}

WebForm2.aspx页面

<%@ 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>



时间: 2024-10-29 10:48:11

SQL 事务 (存储过程与事务)的相关文章

sql存储过程和事务的应用

在去年,学习数据库的时候就学过存储过程了.一直都只知道一些理论,却不知道如何去使用.时隔一年,终于找到如何使用存储过程了. 在机房收费系统中,有些操作,需要多次执行sql语句,多次执行完成才算是完成这个事件流.但是如果其中有一个环节出了错误,那么没出错误的那些操作是不是就多余了. 执行存储过程,就是执行多句SQl语句.而事务,是为了控制这些语句 要么都做,要么 都不做. 在机房收费系统中,执行sql语句的时候. 一般的sql语句使用方法:定义一个字符串,用于存放sql语句.之后指明command

SQL Server中带事务的存储过程简单举例

先来看一个概念: 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全地不执行.那么在存储过程里添加事务,则可以保证该事务里的所有sql代码要么完全执行要么完全不执行. 举个简单的带事务的存储过程: Begin Set NOCOUNT ON; --不返回影响行数 Set XACT_ABORT ON; --使用存储过程执行事务需要开启XACT_ABORT参数(默认为OFF) delete from table1 where n

Mysql存储过程包含事务,且传入sql数据执行

有一个需求是:在一个图片按钮上点击,在按钮的上方弹出一个弹框,根据弹框的内容页面做不同的显示.这个其实没什么难的,主要是要控制好弹框的显示位置,让弹框显示在图片的正上方的中间. 一开始是用的Popupwindow,但是Popupwindow不能给弹窗之外的页面加一个半透明的蒙层,当然可以在页面上加一个专门的作为蒙层的View,但是很显然,这么做会代码变得很恶心,于是又换成了Dialog,因为Dialog弹出的时候会自动加一个蒙层的,但是这个时候,弹框显示位置的Y坐标不对了,后来一顿查,原来Dia

SQL 数据库事务 存储过程练习

数据库事务: 数据库事务(Database Transaction) 是指作为单个逻辑工作单元执行的一系列操作. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源. 设想网上购物的一次交易,其付款过程至少包括以下几步数据库操作: 更新客户所购商品的库存信息 保存客户付款信息--可能包括与银行系统的交互 生成订单并且保存到数据库中 · 更新用户相关信息,例如购物数量等等 正常的情况下,这些操作将顺利进行,最终交易成功,与交易相关的所有数据库信息也成功地更新.

SQL Server中的事务与锁

了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁:是数据库性能的重量级杀手之一,而死锁却是不同事务之间抢占数据资源造成的. 不懂的听上去,挺神奇的,懂的感觉我在扯淡,下面带你好好领略下他们的风采,嗅査下他们的狂骚.. 先说事务--概念,分类 用华仔无间道中的一句来给你诠释下:去不了终点,回到原点. 举例说明: 在一个事务中,你写啦2条sql语句,一

mysql存储过程之事务篇

mysql存储过程之事务篇 事务的四大特征: ACID:Atomic(原子性).Consistent(一致性).Isolated(独立性).Durable (持久性) MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关: sql代码  1. MyISAM:不支持事务,用于只读程序提高性能 2. InnoDB:支持ACID事务.行级锁.并发 3. Berkeley DB:支持事务 事务隔离级别标准: ANSI(美国国家标准学会)标准定义了4个隔离级别,MySQL的InnoDB都

【转】SQL Server中的事务与锁

原文出处:http://www.cnblogs.com/knowledgesea/p/3714417.html 了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁:是数据库性能的重量级杀手之一,而死锁却是不同事务之间抢占数据资源造成的. 不懂的听上去,挺神奇的,懂的感觉我在扯淡,下面带你好好领略下他们的风采,嗅査下他们的狂骚.. 先说事务--概念,分

Java-JDBC调用批处理、存储过程、事务

一.使用Batch批量处理数据库  当需要向数据库发送一批SQL语句执行时,应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率.; 1.实现批处理有两种方式,第一种方式: Statement.addBatch(sql)  list 执行批处理SQL语句 executeBatch()方法:执行批处理命令 clearBatch()方法:清除批处理命令 例: Connection conn = null; Statement st = null; ResultSet rs =

SQL Server中的事务与锁(转)

转自:http://www.cnblogs.com/knowledgesea/p/3714417.html 了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁:是数据库性能的重量级杀手之一,而死锁却是不同事务之间抢占数据资源造成的. 不懂的听上去,挺神奇的,懂的感觉我在扯淡,下面带你好好领略下他们的风采,嗅査下他们的狂骚.. 先说事务--概念,分类

sql复习3之事务管理

事务管理: 单个工作单元称为事务,我们将若干条sql命令组合在一起,形成存储过程.触发器等,利用存储过程和触发器可以进行事务管理. ? 编程基础介绍:函数.程序设计语句等. 程序设计语句: 1.begin ......end 中间插入若干条sql语句,我们将其视为一个单元. 2.跳转语句(goto语句): goto语句可以使程序跳到带有标识符的指定位置继续执行. 3.条件分支语句(if --- else): ? --利用条件分支语句和跳转语句求出1到5之和并输出 declare @sum int