ایجاد تراکنش برای تابعی که دستورات sql رو اجرا میکنه
وقت بخیر
من برا راحتی کارام و جلوگیری از تکرار کد اومدم برای دستورات درج و ویرایش و حذف یک تابع نوشتم.
تو اون تابع دستور رو به صورت رشته ای که تو لایه های قبلی ایجاد شده رو دریافت میکنم و اجرا میگیرم ازش.
کد تابع هم به این صورته
public void Run(String sql)
{
SqlCommand cmd = new SqlCommand();
Connect();//اتصال به دیتا بیس
cmd.Connection = cn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
DisConnect(); //قطع اتصال دیتا بیس
}
خب حالا میخوام بدونم میشه برای این تابع تراکنش ایجاد کرد. تا به هر دلیلی خطایی رخ داد تراکنش مانع از اعمال تغییرات بشه و رول بک انجام بشه(البته تو برنامه سعی کردم خطا ها رو کنترل کنم )
نقل قول: ایجاد تراکنش برای تابعی که دستورات sql رو اجرا میکنه
نقل قول: ایجاد تراکنش برای تابعی که دستورات sql رو اجرا میکنه
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
transaction = connection.BeginTransaction("SampleTransaction");
ممنون میشم این خط رو توضیح بدید.
نقل قول: ایجاد تراکنش برای تابعی که دستورات sql رو اجرا میکنه
نقل قول: ایجاد تراکنش برای تابعی که دستورات sql رو اجرا میکنه
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
من تابع ام رو به صورت زیر تغییر دادم. به نظرتون خوبه یا میشه بهتر از این هم نوشت؟؟!!:متفکر:
public void Execute(String sql)
{
Connect();
SqlTransaction _SqlTransaction;
_SqlTransaction = cn.BeginTransaction();
SqlCommand cmd = new SqlCommand();
cmd.Transaction = _SqlTransaction;
try
{
cmd.Connection = cn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
_SqlTransaction.Commit();
}
catch
{
_SqlTransaction.Rollback();
}
finally
{
DisConnect();
}
}
نقل قول: ایجاد تراکنش برای تابعی که دستورات sql رو اجرا میکنه
متد ExecuteNonQuery مقداری را بازگشت میده که میشه قهمید چند رکورد تحت تاثیر کوئری قرار گرفتهاند؛ که معمولا این مقدار را return میکنند.
لینکهای زیر نمونههای خوبی از لایه دسترسی به داده (Data Access Layer) رو پیاده سازی کردهاند که میتونید ازشون کمک بگیرید
http://aspalliance.com/837_implement...ess_layer_in_c
https://msdn.microsoft.com/en-us/library/ms971568.aspx
لینک زیر هم شبیه لینکهای بالاست منتها به صورت شئگرا دادهها را تحویل لایه بعد میده
http://www.c-sharpcorner.com/article...late-pattern-a