PDA

View Full Version : transaction در vb.net کمک کنید



nazi_shaker
چهارشنبه 28 دی 1384, 14:23 عصر
سلام
من یک application کوچولو نوشتم که با transaction هاش مشکل دارم. برنامه باید تحت شبکه کار کنه. 2 تا جدول درنظر بگیرید که یکی header است و دیگری detail. برای همین من باید عملیات Insert و Update و ... را باید تحت یک transaction انجام بدم و در ضمن تعداد ردیف هایی که به جدول detail اضافه می شود می تواند نامحدود باشد مثل یک سند حسابداری که header و detail دارد. در ضمن من transaction را درکدvb نوشتم نه در database . حالا مشکل من اینکه وقتی در شبکه یک client می خواهد transaction را شروع کند database قفل می شود و دیگه هیچ client دیگه ای نمی تونه هیچ کاری بکنه حتی select.
مشکل من خیلی طولانی شد ببخشید ولی خواهش می کنم بهم کمک کنید:افسرده:

meh_secure
چهارشنبه 28 دی 1384, 15:31 عصر
شما باید از اتصالات disconnected استفاده کنی.
برای این منظور دنبال dataset و datarelation بگرد.

مطهر
چهارشنبه 28 دی 1384, 16:50 عصر
dcNorthwind.Open()

Dim transaction1 As SqlClient.SqlTransaction
transaction1 = dcNorthwind.BeginTransaction()

daCustomers.UpdateCommand.Transaction = transaction1
daOrders.UpdateCommand.Transaction = transaction1

Try
daCustomers.Update(dsNorthwind1)
daOrders.Update(dsNorthwind1)
transaction1.Commit()

Catch dbcex As DBConcurrencyException
MessageBox.Show("Update Failed, Concurrency Exception")
transaction1.Rollback()

Catch ex As Exception
MessageBox.Show("Update Failed")
transaction1.Rollback()

Finally
dcNorthwind.Close()
End Try
البته می خواستم یه قسمت از برنامه ام را کپی کنم اینجا و لی تعداد زیاد و با #C بود
امیدوارم مشکلت حل بشه
به هرحال روش همینه

nazi_shaker
شنبه 01 بهمن 1384, 15:09 عصر
از بابت راهنمایی ممنون ولی اینکار ها را قبلا انجام دادم مشکل من این است که من دو تا جدول دارم که یکی header و دیگری detail است trans action در آغاز insert به جدول header شروع می شود و بعد کاربر می تواند به تعداد نامحدود و در محدوده زمانی detail را هم اضافه کند یعنی در طول زمانی که transaction هنوز بسته نیست کارهای دیگری هم انجام می گیرد منظورم این است که دستورات insert من یکجا و بلافاصله بعد از هم انجام نمیگیرد. حالا این transaction در حالت single مشکلی ندارد ولی در شبکه هر کاربری که زودتر شروع کند database برای آن کاربر قفل می شود.
از اینکه مشکلم را خواندید ممنون خواهش می کنم کمکم کنید

nazi_shaker
دوشنبه 03 بهمن 1384, 08:08 صبح
آهای کسی نمی خواد کمکم کنه

Hamedm
دوشنبه 03 بهمن 1384, 12:22 عصر
از بابت راهنمایی ممنون ولی اینکار ها را قبلا انجام دادم مشکل من این است که من دو تا جدول دارم که یکی header و دیگری detail است trans action در آغاز insert به جدول header شروع می شود و بعد کاربر می تواند به تعداد نامحدود و در محدوده زمانی detail را هم اضافه کند یعنی در طول زمانی که transaction هنوز بسته نیست کارهای دیگری هم انجام می گیرد منظورم این است که دستورات insert من یکجا و بلافاصله بعد از هم انجام نمیگیرد.

سلام

بنظرم ساختار برنامتون غلطه.

چون معنی نداره دستوراتی که باید در Tran باشد بلافاصله اجرا نشه.

در پناه حق موفق باشید و پرتوان

nazi_shaker
سه شنبه 04 بهمن 1384, 13:56 عصر
من فکر می کنم که درست نتونستم منظورم را برسونم.
بهتره که اینطوری بگم ، فکر کنید یک transaction باید برای مدتی باز بمونه و چون در این حالت database قفل می شود هیچ کاربر دیگه ای هیچ کاره دیگه ای نمی تونه انجام بده در حالی که برنامه تحت شبکه کار می کنه خواهش می کنم بهم بگید چکار کنم :گریه: فقط بهم نگید transaction را زود ببندم که نمی شود

niloufar
سه شنبه 04 بهمن 1384, 15:04 عصر
سلام
خوب این جناب Transaction برای چی مدی باز می مونه. هر چیزی فقط به اندازه ضرورت باز می مونه. مثلا یه update میخواد تحت یه transacion انجام بشه. خوب مگه این update قراره چند ساعت طول بکشه؟

nazi_shaker
دوشنبه 10 بهمن 1384, 12:48 عصر
سلام
از همگی ممنونم که بهم کمک کردید من بلاخره تونستم مشکلم رو حل کنم. یک datatableدر کد برنامه ام درست کردم و اطلاعاتم را در آن نگهداشتم بعد از ثبت نهایی از datatable می خوانم و در database وارد میکنم اینطوری دیگه لازم نیست transaction را برای مدت زیادی باز نگه دارم
ممنون

habedijoo
دوشنبه 10 بهمن 1384, 13:40 عصر
سلام دوست عزیز
درسته که کارتو یه جوری راه انداختی ولی به نظر من استاندارد نیست . من یه چند نکته به نظرم رسیده که براتون مینویسم .
اولا اگر یه موقع میخواهید از دادهای موقتی استفاده کنید نیازی به ساختن Database جدید ندارید . شما میتوانید از جداول موقتی Sql Server استفاده کنید .
ثانیا برای قفل نشدن کامل اطلاعات باید سطوح ایزولاسیون تراکنش را مشخص کنید . احتمالا شما روی اطلاعاتتان قفل سنگین مگذاشتید . ( یعنی قفل در برابر Select - Insert - Update - Delete ) شما کافی ست قفلی برای ( Insert - Upadate ) بگذارید . و اجازه select را آزاد بگذارید .