Giáo viên của bạn đang đề cập đến Giao dịch. Hầu hết các cơ sở dữ liệu quan hệ đều hỗ trợ các giao dịch, bao gồm cả MySQL *. Các giao dịch cho phép hành vi nguyên tử của nhiều hoạt động CRUD. Điều này có nghĩa là nếu một thao tác không thành công, cơ sở dữ liệu sẽ khôi phục mọi thay đổi đã được thực hiện như thể chưa có thao tác nào xảy ra.
Hãy nhớ rằng chúng đang chạy tuần tự , không đồng thời. Tuy nhiên, vì chúng là nguyên tử nên cảm giác giống như nó chạy mọi thứ trong một hoạt động duy nhất.
Để chạy giao dịch bằng OleDbConnection
bằng cách sử dụng C #, bạn có thể tạo một giao dịch từ đối tượng kết nối của mình, giả sử rằng nó đang mở. Hãy nhớ rằng không giống như với một thủ tục được lưu trữ, bạn cần phải cam kết hoặc khôi phục giao dịch theo cách thủ công.
Cam kết một giao dịch làm cho tập hợp hoạt động đó trở thành 'vĩnh viễn' trong cơ sở dữ liệu. Sau khi cam kết, nó không thể được khôi phục lại.
Hoàn nguyên là khi bạn đặt lại cơ sở dữ liệu về trạng thái đã tồn tại trước khi bắt đầu giao dịch.
Dưới đây là ví dụ về việc tạo giao dịch từ đối tượng OleDbConnection cùng với việc thực hiện cam kết và hai trường hợp bạn có thể muốn khôi phục:
using(OleDbConnection con = DAL.GetConnection())
{
OleDbTransaction transaction = null;
try
{
con.Open();
transaction = con.BeginTransaction()
string queryString1 = //SQL string
OleDbCommand cmd1 = new OleDbCommand();
{
Connection = con,
CommandType = CommandType.Text,
CommandText = queryString1
};
string queryString2 = //SQL string
OleDbCommand cmd2 = new OleDbCommand();
{
Connection = con,
CommandType = CommandType.Text,
CommandText = queryString2
};
int num1 = cmd.ExecuteNonQuery();
int num2 = cmd.ExecuteNonQuery();
if (num1 == 0 || num2 == 0)
{
//We didn't expect something to return 0, lets roll back
transaction.Rollback();
//send error message
Response.Redirect("register.aspx?err=Error");
}
else
{
//everything seems good, lets commit the transaction!
transaction.Commit();
Session["id"] = MyDB.GetUserId(uname);
Response.Redirect("home.aspx");
}
}
catch(OleDbException ex)
{
try
{
//something bad happened, lets roll everything back
transaction.Rollback();
Response.Redirect("register.aspx?err=Error");
}
catch
{
//we don't really care about this catch statement
}
}
}
Đây là bài viết MSDN về OleDbConnection.BeginTransaction
với một ví dụ chung tương tự như những gì tôi đã đăng ở trên.
CHỈNH SỬA :
* Như @ Clockwork-Muse đã chỉ ra trong phần nhận xét Khả năng hỗ trợ giao dịch của MySQL phụ thuộc vào công cụ cơ bản đang được sử dụng. Có nhiều công cụ MySQL, nhưng hai công cụ chính là InnoDB và MyISAM. InnoDB CÓ THỂ hỗ trợ giao dịch, nhưng MyISAM không KHÔNG .