多條sql語句同時執(zhí)行的時候如果有其中一條語句出現(xiàn)錯誤那么可能導致數(shù)據(jù)的不完整。通過事物可以保證這些語句要么全部成功航徙。要么全部失敗如贷。如果失敗了就會恢復到事物之前的狀態(tài)。這個叫做回滾
那么現(xiàn)在我們在數(shù)據(jù)庫中創(chuàng)建一個學生表
CREATE TABLE [dbo].[Student](
[ID] [INT] IDENTITY(1,1) NOT NULL,
[Name] [VARCHAR](50) NULL,
[Sex] [VARCHAR](2) NULL,
[Age] [VARCHAR](50) NULL,
[Class] [VARCHAR](50) NULL,
CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
創(chuàng)建好表格后通過ADO.NET進行插入捉偏。
using (SqlConnection conn = new SqlConnection("Server=.;DataBase=School;User Id=sa;PassWord=xx"))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
conn.Open();//打開數(shù)據(jù)庫
SqlTransaction tran = conn.BeginTransaction();//開啟數(shù)據(jù)庫事物
cmd.Transaction = tran;
try {
for (int i = 0; i < 5; i++)
{
if (i == 2)//如果執(zhí)行到第二個的是否把學生表的性別多加幾個sss因為數(shù)據(jù)庫創(chuàng)建的是否這一列的字段長度是2這樣子就超出字段長度會出現(xiàn)異常倒得。
{
cmd.CommandText = "insert into Student(Name,Sex,Age,Class) values('" + this.TextBox1.Text + "','" + this.DropDownList1.SelectedValue + "sss" + "','" + this.TextBox2.Text + "','" + TextBox3.Text + "')";
}
else
{
cmd.CommandText = "insert into Student(Name,Sex,Age,Class) values('" + this.TextBox1.Text + "','" + this.DropDownList1.SelectedValue + "','" + this.TextBox2.Text + "','" + TextBox3.Text + "')";
}
cmd.ExecuteNonQuery();
}
tran.Commit();
}
catch
{
tran.Rollback();
}
conn.Close();
}
}
通過上面的代碼可以看到。我們故意再第二次插入的是否修改了學生的性別多加了幾個字符夭禽。這樣子會導致出現(xiàn)異常霞掺,在異常發(fā)送的是否執(zhí)行了 catch語句中的回滾。這樣子前面兩條語句也就恢復到之前的狀態(tài)了讹躯。就相當于沒有插入過菩彬。大家有問題可以
Console.WriteLine(”加群“+"537905238");