PDA

View Full Version : سوال: begin & commit در حلقه for



farhadsoft
دوشنبه 10 مرداد 1390, 12:21 عصر
سلام دوستان

من یه آرایه ای دارم که می خوام مقادیر این آرایه با یک حلقه فور در پایگاه داده درج بشه
مثلا این آرایه 5 خانه داره و قراره مقادیر این 5 آرایه با یک اینزرت و یک فور در پایگاه داده ثبت بشه
حلا میخوام اگر به هر دلیلی حلقه شکسته بشه تمامی اینزرت های قبلی رول بک بخوره

begin


for (i=0;i<=10;i++)
insert(arra[i])

commit


راهنمایی کنید لطفا

Esmail Solhkhah
دوشنبه 10 مرداد 1390, 14:57 عصر
سلام دوستان

من یه آرایه ای دارم که می خوام مقادیر این آرایه با یک حلقه فور در پایگاه داده درج بشه
مثلا این آرایه 5 خانه داره و قراره مقادیر این 5 آرایه با یک اینزرت و یک فور در پایگاه داده ثبت بشه
حلا میخوام اگر به هر دلیلی حلقه شکسته بشه تمامی اینزرت های قبلی رول بک بخوره

begin


for (i=0;i<=10;i++)
insert(arra[i])

commit


راهنمایی کنید لطفا






از این کد استفاده کنید (استفاده از ترنس اکشن)

using (TransactionScope scope = new TransactionScope())
{
try
{
for (i=0;i<=10;i++)
{
insert(arra[i]);
}
scope.Complete();
}
catch (Exception ex)
{
// handele exeption
}
}


البته برای استفاده از TransactionScope شما باید System.Transactions رو به لیست رفرنسهاتون اضافه کنید

و در این فرمی که دارید از TransactionScope استفاده میکنید

تو لیست using این سطر رو بنویسید using System.Transactions;

البته برای استفاده از TansactionScope باید سرویس MSDTC فعال باشه

(دقت کنید اگه برنامه رو برا مشتری مینویسید و نصب براش درست میکنید این سرویس رو باید در کامپیوتر مقصد فعال کنید)

موفق باشید.

farhadsoft
دوشنبه 10 مرداد 1390, 23:40 عصر
از این کد استفاده کنید (استفاده از ترنس اکشن)

using (TransactionScope scope = new TransactionScope())
{
try
{
for (i=0;i<=10;i++)
{
insert(arra[i]);
}
scope.Complete();
}
catch (Exception ex)
{
// handele exeption
}
}


البته برای استفاده از TransactionScope شما باید System.Transactions رو به لیست رفرنسهاتون اضافه کنید

و در این فرمی که دارید از TransactionScope استفاده میکنید

تو لیست using این سطر رو بنویسید using System.Transactions;

البته برای استفاده از TansactionScope باید سرویس MSDTC فعال باشه

(دقت کنید اگه برنامه رو برا مشتری مینویسید و نصب براش درست میکنید این سرویس رو باید در کامپیوتر مقصد فعال کنید)

موفق باشید.


ممنون از راهنماییت
من این کارو انجام دادم ولی با این ارور روبرو شدم


The ITransactionLocal interface is not supported by the 'Microsoft.ACE.OLEDB.12.0' provider. Local transactions are unavailable with the current provider.

Esmail Solhkhah
سه شنبه 11 مرداد 1390, 02:27 صبح
دوست عزیز خطا کاملا درسته چون

TransactionScope پرووایدر jet رو ساپورت نمیکنه بجاش میتونید از OleDbTransaction استفاده کنید

یه متد نمونه برا استفاده از این نوع ترنس اکشن


public void RunOleDbTransaction(string myConnString)
{
OleDbConnection myConnection = new OleDbConnection(myConnString);
myConnection.Open();

OleDbCommand myCommand = myConnection.CreateCommand();
OleDbTransaction myTrans;


myTrans = myConnection.BeginTransaction();

myCommand.Connection = myConnection;
myCommand.Transaction = myTrans;

try
{
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
myCommand.ExecuteNonQuery();
myTrans.Commit();
}
catch (Exception e)
{
try
{
myTrans.Rollback();
}
catch (OleDbException ex)
{
if (myTrans.Connection != null)
{
MessageBox.Show("An exception of type " + ex.GetType() +
" was encountered while attempting to roll back the transaction.");
}
}

MessageBox.Show("An exception of type " + e.GetType() +
" was encountered while inserting the data.");
MessageBox.Show("Neither record was written to database.");
}
finally
{
myConnection.Close();
}
}


موفق باشید.

f.beigirad
جمعه 04 مرداد 1392, 10:27 صبح
البته برای استفاده از TansactionScope باید سرویس MSDTC فعال باشه

(دقت کنید اگه برنامه رو برا مشتری مینویسید و نصب براش درست میکنید این سرویس رو باید در کامپیوتر مقصد فعال کنید)

با سلام.میشه درباره جملات بالا بیشتر توضیح بدین


با تشکر