Guru Anda mengacu pada Transaksi. Sebagian besar database relasional mendukung transaksi, termasuk MySQL*. Transaksi memungkinkan perilaku atom dari beberapa operasi CRUD. Ini berarti bahwa jika satu operasi gagal, database akan mengembalikan semua perubahan yang dibuat seolah-olah tidak ada operasi yang pernah terjadi.
Ingatlah bahwa mereka berjalan berurutan , tidak serentak. Namun, karena mereka atom, rasanya mirip dengan menjalankan semuanya dalam satu operasi.
Untuk menjalankan transaksi menggunakan OleDbConnection
kelas menggunakan C# Anda dapat membuat transaksi dari objek koneksi Anda, dengan asumsi bahwa itu terbuka. Perlu diingat bahwa tidak seperti prosedur tersimpan, Anda perlu melakukan atau mengembalikan transaksi secara manual.
Melakukan transaksi membuat rangkaian operasi itu 'permanen' ke database. Setelah melakukan itu tidak dapat dibatalkan.
Rollback adalah saat Anda mereset database ke status yang ada sebelum memulai transaksi.
Di bawah ini adalah contoh membuat transaksi dari objek OleDbConnection bersama dengan melakukan komit dan dua kasus di mana Anda mungkin ingin melakukan rollback:
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
}
}
}
Berikut artikel MSDN di OleDbConnection.BeginTransaction
metode dengan contoh umum yang mirip dengan apa yang saya posting di atas.
EDIT :
*Seperti yang ditunjukkan oleh @Clockwork-Muse dalam komentar, kemampuan MySQL untuk mendukung transaksi bergantung pada mesin dasar yang digunakan. Ada banyak mesin MySQL, tetapi dua yang utama adalah InnoDB dan MyISAM. InnoDB BISA mendukung transaksi, tetapi MyISAM TIDAK .