Váš učitel má na mysli Transakce. Většina relačních databází podporuje transakce, včetně MySQL*. Transakce umožňují atomické chování více operací CRUD. To znamená, že pokud jedna operace selže, databáze vrátí zpět všechny provedené změny, jako by k žádné z operací nikdy nedošlo.
Mějte na paměti, že běží postupně , ne zároveň. Nicméně, protože jsou atomové, je to podobné, jako když běží vše v jediné operaci.
Chcete-li spustit transakci pomocí OleDbConnection
třídy pomocí C# můžete vytvořit transakci z vašeho objektu připojení za předpokladu, že je otevřený. Mějte však na paměti, že na rozdíl od uložené procedury musíte transakci ručně potvrdit nebo vrátit zpět.
Potvrzením transakce se tato sada operací stane „trvalou“ v databázi. Po potvrzení jej nelze vrátit zpět.
Vrácení zpět je, když resetujete databázi do stavu, který existoval před zahájením transakce.
Níže je uveden příklad vytvoření transakce z objektu OleDbConnection spolu s provedením potvrzení a dva případy, kdy budete chtít vrátit zpět:
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
}
}
}
Zde je článek MSDN o OleDbConnection.BeginTransaction
metoda s obecným příkladem podobným tomu, co jsem zveřejnil výše.
UPRAVIT :
*Jak @Clockwork-Muse zdůraznil v komentářích, schopnost MySQL podporovat transakce závisí na použitém základním enginu. Existuje mnoho enginů MySQL, ale dva hlavní jsou InnoDB a MyISAM. InnoDB UMÍ podporuje transakce, ale MyISAM NE .