程序员人生 网站导航

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

栏目:数据库应用时间:2015-01-20 08:25:14

<1>

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

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

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


SQL Server 事务语法

Sql server 事务的两种用法


<1>创建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 Moneys=Moneys-@momeys where ID=@fromID ---履行的第1个操作,转账 原来的金额-转账的金额 update bb set Moneys=Moneys+@momeys where ID=@toID --履行第2个操作,接受转账 原来的的金额+转账的金额 if @@ERROR<>0 --判断 如果两条语句有任何1条出现毛病。(如果前面的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>



------分隔线----------------------------
------分隔线----------------------------

最新技术推荐