Вашият учител има предвид транзакциите. Повечето релационни бази данни поддържат транзакции, включително MySQL*. Транзакциите позволяват атомарно поведение на множество CRUD операции. Това означава, че ако една операция е неуспешна, базата данни ще отмени всички промени, които са били направени, сякаш нито една от операциите не се е случила.
Имайте предвид, че те работят последователнопоред , не едновременно. Въпреки това, тъй като те са атомни, усещането е подобно на това, че изпълнява всичко в една операция.
За да изпълните транзакция с помощта на OleDbConnection
клас, използвайки C#, можете да създадете транзакция от вашия обект за връзка, ако приемем, че е отворен. Имайте предвид обаче, че за разлика от съхранената процедура трябва ръчно да извършите или върнете транзакцията.
Извършването на транзакция прави този набор от операции „постоянен“ в базата данни. След извършване не може да бъде върнат назад.
Връщане назад е, когато нулирате базата данни до състоянието, което е съществувало преди стартиране на транзакцията.
По-долу е даден пример за създаване на транзакция от обект OleDbConnection заедно с извършване на ангажимент и два случая, в които може да искате да върнете назад:
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
}
}
}
Ето статията в MSDN за OleDbConnection.BeginTransaction
метод с общ пример, подобен на това, което публикувах по-горе.
РЕДАКТИРАНЕ :
*Както @Clockwork-Muse посочи в коментарите, способността на MySQL да поддържа транзакции зависи от използвания основен двигател. Има много MySQL двигатели, но двата основни са InnoDB и MyISAM. InnoDB МОЖЕ поддържа транзакции, но MyISAM НЕ .