Je docent verwijst naar Transacties. De meeste relationele databases ondersteunen transacties, waaronder MySQL*. Transacties zorgen voor atomair gedrag van meerdere CRUD-bewerkingen. Dit betekent dat als een bewerking mislukt, de database alle aangebrachte wijzigingen terugdraait alsof geen van de bewerkingen ooit heeft plaatsgevonden.
Houd er rekening mee dat ze opeenvolgend worden uitgevoerd , niet tegelijkertijd. Omdat ze echter atomair zijn, voelt het alsof alles in één bewerking wordt uitgevoerd.
Om een transactie uit te voeren met de OleDbConnection
class met C# kunt u een transactie maken van uw verbindingsobject, ervan uitgaande dat het open is. Houd er echter rekening mee dat u, in tegenstelling tot een opgeslagen procedure, de transactie handmatig moet vastleggen of terugdraaien.
Door een transactie te plegen, wordt die reeks bewerkingen 'permanent' voor de database. Na het plegen kan het niet worden teruggedraaid.
Een rollback is wanneer u de database terugzet naar de staat die bestond voordat de transactie werd gestart.
Hieronder ziet u een voorbeeld van het maken van een transactie van een OleDbConnection-object samen met het uitvoeren van een vastlegging en twee gevallen waarin u mogelijk wilt terugdraaien:
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
}
}
}
Hier is het MSDN-artikel over de OleDbConnection.BeginTransaction
methode met een generiek voorbeeld vergelijkbaar met wat ik hierboven heb gepost.
BEWERKEN :
*Zoals @Clockwork-Muse in de opmerkingen aangaf, hangt het vermogen van MySQL om transacties te ondersteunen af van de onderliggende engine die wordt gebruikt. Er zijn veel MySQL-engines, maar de twee belangrijkste zijn InnoDB en MyISAM. InnoDB KAN ondersteunt transacties, maar MyISAM doet NIET .