Seu professor está se referindo a Transações. A maioria dos bancos de dados relacionais suporta transações, incluindo MySQL*. As transações permitem o comportamento atômico de várias operações CRUD. Isso significa que, se uma operação falhar, o banco de dados reverterá todas as alterações feitas como se nenhuma das operações tivesse ocorrido.
Lembre-se de que eles estão sendo executados sequencialmente , não simultaneamente. No entanto, como eles são atômicos, parece semelhante a executar tudo em uma única operação.
Para executar uma transação usando o
OleDbConnection
class usando C#, você pode criar uma transação do seu objeto de conexão, supondo que esteja aberto. Tenha em mente que, diferentemente de um procedimento armazenado, você precisa confirmar ou reverter manualmente a transação. A confirmação de uma transação torna esse conjunto de operações 'permanente' no banco de dados. Depois de confirmar, não pode ser revertido.
Uma reversão é quando você redefine o banco de dados para o estado que existia antes de iniciar a transação.
Abaixo está um exemplo de criação de uma transação de um objeto OleDbConnection juntamente com a execução de um commit e dois casos em que você pode querer reverter:
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
}
}
}
Aqui está o artigo do MSDN sobre o
OleDbConnection.BeginTransaction
método com um exemplo genérico semelhante ao que postei acima. EDITAR :
*Como @Clockwork-Muse apontou nos comentários, a capacidade do MySQL de suportar transações depende do mecanismo subjacente que está sendo usado. Existem muitos mecanismos MySQL, mas os dois principais são InnoDB e MyISAM. InnoDB PODE suporta transações, mas o MyISAM NÃO .