Ваш преподаватель имеет отношение к транзакциям. Большинство реляционных баз данных поддерживают транзакции, включая 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
с родовым пример, аналогичный тому, что я написал выше.
EDIT:
* Как @ Заводной-Muse отметил в комментарии способность MySQL для поддержки транзакций зависит от основного двигателя используется. Существует много MySQL-движков, но двумя основными являются InnoDB и MyISAM. InnoDB CAN поддержка сделка, но MyISAM делает NOT.
К какой базе данных вы подключаетесь? Вы отметили как MySQL, так и SQL Server, но это совершенно разные системы. Также, каков ваш вопрос? На данный момент это немного неясно. Я думаю, что ваш учитель ссылается на концепцию, известную как ** транзакции **. Это позволяет запускать несколько команд атомарно, т. Е. Если кто-то не работает, все откатывается. Вы спрашиваете, как использовать транзакции? – JNYRanger
Реляционные базы данных поддерживают транзакции. Вы можете переносить несколько операторов в транзакцию, либо все они выполняются, либо нет. Я думаю, что такая логика должна идти в хранимых процедурах, а не в коде приложения. –
'Как только мой учитель сказал мне, что есть что-то, это работает так: вы делаете все SQL-запросы или никого ... Ваш Учитель говорит о« Транзакции ». Пойдите и прочитайте об этом. – Rahul