ADO.NET事物处理

多条sql语句同时执行的时候如果有其中一条语句出现错误那么可能导致数据的不完整。通过事物可以保证这些语句要么全部成功。要么全部失败。如果失败了就会恢复到事物之前的状态。这个叫做回滚
那么现在我们在数据库中创建一个学生表

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

创建好表格后通过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();//打开数据库
SqlTransaction tran = conn.BeginTransaction();//开启数据库事物
cmd.Transaction = tran;
try {
for (int i = 0; i < 5; i++)
{
if (i == 2)//如果执行到第二个的是否把学生表的性别多加几个sss因为数据库创建的是否这一列的字段长度是2这样子就超出字段长度会出现异常。
{
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();
}
}

通过上面的代码可以看到。我们故意再第二次插入的是否修改了学生的性别多加了几个字符。这样子会导致出现异常,在异常发送的是否执行了 catch语句中的回滚。这样子前面两条语句也就恢复到之前的状态了。就相当于没有插入过。大家有问题可以

Console.WriteLine(”加群“+"537905238");

你可能感兴趣的:(ADO.NET事物处理)