PDA

View Full Version : مدیریت ثبت اطلاعات [C#‎‎ & SQL Server]



csharpcollegian
دوشنبه 03 اسفند 1394, 04:42 صبح
سلام وقت همگی به خیر
دوستان میخواستم بدونم چطور میشه زمانی که به دلیل انجام یک تراکنش نیاز به ثبت و تغییر اطلاعات در چند جدول هست، این کار رو به بهترین روش ممکن انجام داد ؟
روشی که اگر در هنگام ثبت و تغییر اطلاعات برق رفت یا به هر دلیلی ارتباط به صورت ناگهانی با دیتابیس قطع شد تضمین کنه که یا همه ی جدول ها با هم اطلاعاتشون
بروز میشه یا اگر تغییر فقط در چند جدول انجام شده و تعدادی جدول باقی موندن، تغییرات انجام شده تصحیح بشه و به حالت اول برگرده !
دقیقا مثل سیستم بانک که اگه پول از حساب کم بشه ولی خرید انجام نشه، تغییرات انجام شده در حساب تصحیح میشه
فقط ممنون میشم در حد متوسط و قابل فهم توضیح بدین
خیلی ممنون

ali_md110
دوشنبه 03 اسفند 1394, 06:50 صبح
سلام
از Transaction به همراه Commit و Rollback استفاده کنید

private void SqlTrans(string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();


SqlCommand command = connection.CreateCommand();
SqlTransaction transaction;


// شروع تراکنش.
transaction = connection.BeginTransaction("SampleTransaction");


command.Connection = connection;
command.Transaction = transaction;
//دو عملیات درج همزمان
try
{
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
command.ExecuteNonQuery();
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
command.ExecuteNonQuery();



transaction.Commit();
هر دو رکورد توی دیتابیس در اینجا ثبت میشه
}
catch (Exception ex)
{

try
{
transaction.Rollback();


اگر اتفاقی بد بیوفته هد دو عمل درج کنسل میشه
}
catch (Exception ex2)
{
}
}
}
}

csharpcollegian
دوشنبه 03 اسفند 1394, 07:42 صبح
.
.
.
}
catch (Exception ex)
{

try
{
transaction.Rollback();

اگر اتفاقی بد بیوفته هد دو عمل درج کنسل میشه
}
catch (Exception ex2)
{
}
}
}
}




پاسختون عالی و کامل بود
مشکلم حل شد
ممنونم ازتون

csharpcollegian
دوشنبه 03 اسفند 1394, 13:57 عصر
.
.
.
catch (Exception ex)
{

try
{
transaction.Rollback();

اگر اتفاقی بد بیوفته هد دو عمل درج کنسل میشه
}
catch (Exception ex2)
{
}



دوست عزیز اگر درست متوجه شده باشم آخرین catch واسه وقتیه که عمل Rollback هم نتونه انجام بشه (حالا به هر دلیلی مثل بسته بودن کانکشن)
حالا سوال من اینه اگه برق بره خب قطعا عمل Rollback هم نمی تونه انجام بشه !!!
توو اینجور مواقع باید چه کار کرد ؟
داخل catch آخر چه کدی باید بنویسیم که مشکل رو حل کنه ؟
ممنون