事務處理是爲了防止在網絡上多用戶對數據庫的併發操作破壞數據的一致性和完整性,而事務處理主要通過SqlTransaction對象完成,其主要的方法有:Commit()方法主要負責提交事務處理完成真正的數據庫查詢更新操作,Rollback()方法主要負責當數據查詢更新等數據庫操作出現異常時的事務回滾。ADO.NET的事務處理主要通過SqlCommand對象來實現事務對象,代碼如下:
using (SqlConnection con = new SqlConnection("Data Source = localhost; Initial Catalog = UserDate; Integrated Security = True"))
{
SqlTransaction transql = null;//申明SqlTransaction對象的實例
SqlCommand cmd = new SqlCommand();
try
{
con.Open();//創建數據庫鏈接
transql = con.BeginTransaction();//開始事務處理
cmd.Connection = con;//設置Command對象的鏈接
cmd.Transaction = transql;//設置Command對象的事務
//設置帶參數的SQL語句
cmd.CommandText = "INSERT INTO b1(name, company, position, shijian) VALUES(@Name, @Company, @Position, @Datetime)";
//爲參數賦值(注意參數在數據庫中的數據類型)
cmd.Parameters.Add(new SqlParameter("Name", Name.Text));
cmd.Parameters.Add(new SqlParameter("Company", Company.Text));
cmd.Parameters.Add(new SqlParameter("Position", Position.Text));
cmd.Parameters.Add(new SqlParameter("Datetime", DateTime.Parse(Datetime.Text)));//注意數據類型轉換
//執行SQL語句
cmd.ExecuteNonQuery();
//提交事務
transql.Commit();
Response.Write("添加成功!
");
}
catch
{
//如果程序拋出異常則做事務回滾
transql.Rollback();
}
}
注:在上面的代碼中,特別要注意SqlTransaction的實例接收的是SqlConnection實例的BeginTransaction()的返回值,SqlCommand的實例的Transaction屬性接收的是SqlTransaction的實例,即SqlConnection實例的BeginTransaction()的返回值,而整個事務的過程是由SqlCommand實例來書寫的,也就是說,在SqlCommand實例裏面的代碼相對應的事務都由SqlTransaction的實例自動生成,前提是必須要有transql = con.BeginTransaction();cmd.Transaction= transql;這兩句代碼,最後用SqlTransaction的Commit()方法或者Rollback()對事務進行提交或者回滾