PDA

View Full Version : حفظ نظم اطلاعات پس از قطع برق



man_iran
دوشنبه 09 شهریور 1388, 17:39 عصر
چطور میشه چنین مشکل هایی را برطرف کرد؟ :

برنامه ای داشته باشیم که در یه قسمت آن مثلا یه باتون، چندین فرایند ذخیره سازی باشه (ذخیره اطلاعات در جدول دانشجو، در جدول استاد، جدول نمرات). حال بعد از کلیک بر روی باتون تمام این فرایندها اجرا میشن.
ولی مشکل اینجاست که اگر بعد از اجرای یکی، دو فرایند برنامه از کاربیفته (تحت هر شرایط، مثلا تله یا حتی قطع برق). آن موقع بقیه اطلاعات ذخیره نمیشن و سبب به هم ریختگی در اطلاعات میشه. و برای برطرف کردن آن باید اطلاعات قبلی حذف بشن ولی از کجا بفهمیم چه اطلاعاتی ذخیره شدن و هزار و یه مشکل دیگه! چطور میشه این مشکلات را برطرف کرد؟
حتما برای چنین مسائلی روش های خاصی وجود داره، شما تصور کنید برنامه شما تحت سرور باشه و امکان به وجود آمدن چنین مشکلاتی هم خیلی زیاده.

alireza_tavakol
دوشنبه 09 شهریور 1388, 18:33 عصر
مبحثه تراکنش ها در بانک اطلاعاتی به همین قضیه پرداخته شده

تراکنش های اتمیک که از قاعده همه یا هیچ پیروی میکنند

man_iran
دوشنبه 09 شهریور 1388, 18:47 عصر
مبحثه تراکنش ها در بانک اطلاعاتی به همین قضیه پرداخته شده

تراکنش های اتمیک که از قاعده همه یا هیچ پیروی میکنند
بله در بنک اطلاعاتی چنین است.
ولی چطور به سی شارپ رپتش بدیم ؟

behzadk
دوشنبه 09 شهریور 1388, 19:02 عصر
sqltransaction transact;
transact=cnn.begintransaction();
cmd.transaction=transaction;
try
{
transact.commit();
}
catch
{
transact.rolback();

}

man_iran
سه شنبه 10 شهریور 1388, 13:10 عصر
sqltransaction transact;
transact=cnn.begintransaction();
cmd.transaction=transaction;
try
{
transact.commit();
}
catch
{
transact.rolback();

}

فکر کنم درست متوجه نشدید!
عملیات به این صورته :
سه تا متد ذخیره سازی دارید و توی ذخیره سازی به هم ربطی ندارن ولی اطلاعاتشون به هم ربط دارن. و همه متد ها توی یه باتون هستن
حالا اگه برق قطع بشه و متد 1 ذخیره کرده باشه اما دو متد بعدی وقت نکرده باشند. آن موقع چه کار می شه کرد ؟
چه طور می شه از کدی که دادید برای این کار استفاده کرد؟ اصلا می شه ؟
اگه باز متوجه نشدید بگید بیشتر توضیح بدم.

saadi2
سه شنبه 10 شهریور 1388, 22:18 عصر
کدهای behzadk کاملا درسته ولی من یه مثال میزنم متوجه بشی البته vb هستش.


Dim SqlTran As SqlTransaction = Nothing
SqlTran = Con.BeginTransaction()
Com.Transaction = SqlTran
Try
Com.CommandText = "Insert into table1 values (val1, val2, val3)"
Com.ExecuteNonQuery()
Com.CommandText = "Insert into table2 values (val1, val2, val3)"
Com.ExecuteNonQuery()
Com.CommandText = "Insert into table3 values (val1, val2, val3)"
Com.ExecuteNonQuery()
SqlTran.Commit()
Catch ex As SqlException
SqlTran.Rollback()
End Try


کدهای insert یا همشون با هم اجرا میشن یا اگه اشکالی پیش بیاد یا حتی برق قطع بشه هیچکدوم اجرا نمیشن. خیالت راحت

mn_zandy63
پنج شنبه 12 شهریور 1388, 14:40 عصر
همونطور که دوستان توضیح دادند، کافیه سه تا متدت رو داخل بلاک try و قبل از دستور Commit فراخونی کنی.
همین.
در صورتی که به هر دلیلی در هنگام اجرای این سه متد ایرادی پیش بیاد مثل این است که هیچ یک اجرا نشده اند.