日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Sql server 事务的两种用法

發布時間:2024/1/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Sql server 事务的两种用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
事務(Transaction)是并發控制的單位,是用戶定義的一個操作序列。這些操作要么都做,要么都不做,是一個不可分割的工作單位。 通過事務,SQL Server能將邏輯相關的一組操作綁定在一起,以便服務器保持數據的完整性。 在sql server+ .net 開發環境下,有兩種方法能夠完成事務的操作,保持數據庫的數據完整性; 一個就是用sql存儲過程,另一個就是在ADO.NET中一種簡單的事務處理; 現在通過一個典型的銀行轉賬的例子來說明一下這兩個例子的用法 我們先來看看sql存儲過程是如何來完成事務的操作的: 首先創建一個表: create database aaaa --創建一個表,包含用戶的帳號和錢數 go use aaaa create table bb ( ID int not null primary key, ?--帳號 moneys money ???--轉賬金額 ) insert into bb values ('1','2000')?--插入兩條數據 insert into bb values ('2','3000')

用這個表創建一個存儲過程:

create procedure?mon?--創建存儲過程,定義幾個變量

@toID int,??? --接收轉賬的賬戶

@fromID 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?--判斷如果兩條語句有任何一條出現錯誤

begin rollback tran –開始執行事務的回滾,恢復的轉賬開始之前狀態

return 0

end

go

?

else???--如何兩條都執行成功

begin commit tran?執行這個事務的操作

return 1

end

go

?

接下來看看C#.net?是如何調用這個存儲過程的:

??? protected void Button1_Click(object sender, EventArgs e)

??? {

??????? SqlConnection con =new SqlConnection(@"Data Source=.\SQLEXPRESS;database=aaaa;uid=sa;pwd=jcx"); //連接字符串

??????? SqlCommand cmd = new SqlCommand("mon",con); //調用存儲過程

??????? cmd.CommandType = CommandType.StoredProcedure;

??????? con.Open();

??????? SqlParameter prar = new SqlParameter();//傳遞參數

??????? cmd.Parameters.AddWithValue("@fromID", 1);

??????? cmd.Parameters.AddWithValue("@toID", 2);

??????? cmd.Parameters.AddWithValue("@momeys",Convert.ToInt32( TextBox1.Text) );

?

??????? cmd.Parameters.Add("@return", "").Direction = ParameterDirection.ReturnValue;//獲取存儲過程的返回值

??????? cmd.ExecuteNonQuery();

??????? string value = cmd.Parameters["@return"].Value.ToString();//把返回值賦值給value

??????? if (value == "1")

??????? {

??????????? Label1.Text = "添加成功";

??????? }

??????? else

??????? {

??????????? Label1.Text = "添加失敗";

?????? }

}

這個也就是在存儲過程里添加事務,再來看看不在數據庫寫sql存儲過程,ADO.NET是如何處理事務的:

protected void Button2_Click(object sender, EventArgs e)

??? {

??????? SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;database=aaaa;uid=sa;pwd=jcx");

??????? con.Open();

??????? SqlTransaction tran = con.BeginTransaction();//先實例SqlTransaction類,使用這個事務使用的是con?這個連接,使用BeginTransaction這個方法來開始執行這個事務

??????? SqlCommand cmd = new SqlCommand();

??????? cmd.Connection = con;

??????? cmd.Transaction = tran;

??????? try

??????? {

???????????? //在try{}?塊里執行sqlcommand命令,

??????????? cmd.CommandText = "update bb set moneys=moneys-'" + Convert.ToInt32(TextBox1.Text) + "' where ID='1'";

??????????? cmd.ExecuteNonQuery();

??????????? cmd.CommandText = "update bb set moneys=moneys+' aa ' where ID='2'";

??????????? cmd.ExecuteNonQuery();

??????????? tran.Commit();//如果兩個sql命令都執行成功,則執行commit這個方法,執行這些操作

?

??????????? Label1.Text = "添加成功";

??????? }

??????? catch

??????? {

???????? ???Label1.Text = "添加失敗";

??????????? tran.Rollback();//如何執行不成功,發生異常,則執行rollback方法,回滾到事務操作開始之前;

??????? }

?

??? }

這就是兩個事務不同用法的簡單例子,ADO.NET?事務處理的方法看起來比較簡單,但是他要使用同一個連接來執行這些操作,要是同時使用幾個數據庫來用一個事務執行,這樣就比較繁瑣,但是要是用sql存儲過程,這樣就相對比較簡單,總之是兩種方法各有各的優點。

轉載于:https://www.cnblogs.com/litaohao/archive/2013/03/02/2939766.html

總結

以上是生活随笔為你收集整理的Sql server 事务的两种用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。