PDA

View Full Version : برنامه نویسی دولایه و مشکل ترانزکشن



hamid.shekasteh
دوشنبه 12 مرداد 1388, 14:53 عصر
سلام
من دارم روی یه پروژه کار می کنم مشکلم در کار با ترانزکشن ها است.
برنامه دو لایه می باشد در لایه ی DAL من یه کلاس پایه مثل زیر دارم(خلاصه):



public class BaseData
{

public virtual void Save()
{
}

public virtual void Fill()
{
}

protected string ConnectionStr = "Data Source=(LOCAL);Initial Catalog=PROJE;Integrated Security=True";

protected SqlCommand selectCommand;
protected SqlCommand insertCommand;
protected SqlCommand updateCommand;
protected SqlCommand deleteCommand;

public SqlConnection connection;

protected SqlDataAdapter dataAdapter;

public DataSet ds;

public BaseData()
{

connection = new SqlConnection(ConnectionStr);

selectCommand = new SqlCommand("", connection);
insertCommand = new SqlCommand("", connection);
updateCommand = new SqlCommand("", connection);
deleteCommand = new SqlCommand("", connection);



ds = new DataSet();

dataAdapter = new SqlDataAdapter();


dataAdapter.SelectCommand = selectCommand;
dataAdapter.InsertCommand = insertCommand;
dataAdapter.DeleteCommand = deleteCommand;//
dataAdapter.UpdateCommand = updateCommand;//

}

}






حالا به ازای هر یه جدول یه کلاس از این کلاس پایه مشتق می کنم (خلاصه)نمونه:





public class Tbl_ObjectManager : BaseData

{

public DataSet1.TB_ObjectDataTable dt;


public Tbl_ObjectManager()
: base()
{
Init();
}

private void Init()
{

dt = new DataSet1.TB_ObjectDataTable();

ds.Tables.Add(dt);

// sqlSelectCommand…
// sqlInsertCommand…
// sqlUpdateCommand…
// sqlDeleteCommand…


// sqlDataAdapter1…
this.dataAdapter.DeleteCommand = this.deleteCommand;
this.dataAdapter.InsertCommand = this.insertCommand;
this.dataAdapter.SelectCommand = this.selectCommand;
this.dataAdapter.TableMappings.AddRange(new System.Data.Common.DataTableMapping[] {//…}
this.dataAdapter.UpdateCommand = this.updateCommand;

}


public override void Save()
{

dataAdapter.Update(dt);
dt.AcceptChanges();

}

public override void Fill()
{

dataAdapter.Fill(dt);


}


{



حالا مشکل اینه که ترانزکشن ها رو چه طور باید استفاده کنم،اگه از ترانزکشن ها استفاده کنم خطا می ده،احتمالا چون هر کلاس یک کانکشن داره و اینها اصلا با هم ارتباطی ندارند.پس در کلاس پایه کانکشن و کانکشن استرینگ را staticتعریف کردم خطایی نمی داد اما ترانزکشن عمل نمیکرد.
راستی از کلاس SqlTransaction هم به صورت معمول و مثل زیر استفاده میکنم:







BaseData.connection.Open();
SqlTransaction Transaction = BaseData.connection.BeginTransaction();

Try{

Sell.Save();
Buyer.Save();
Transaction.Commit();
}
catch (Exception exp)
{
Transaction.Rollback();


}








ممنون میشم اگه لطف کنید و کمک کنید.