<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 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元
在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">