hamid.shekasteh
دوشنبه 12 مرداد 1388, 15: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();
}
ممنون میشم اگه لطف کنید و کمک کنید.
من دارم روی یه پروژه کار می کنم مشکلم در کار با ترانزکشن ها است.
برنامه دو لایه می باشد در لایه ی 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();
}
ممنون میشم اگه لطف کنید و کمک کنید.