PDA

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



محسن شامحمدی
سه شنبه 30 شهریور 1389, 17:26 عصر
دوستان من توی برنامه دیتابیسیم کلا از یک connection برای اتصال به دیتابیس استفاده می کنم و هر موقع باهاش کار دارم اینطوری کار می کنم:

cnn.Open()
cmd.CommandText = SqlStatement
cmd.ExecuteNonQuery
cnn.Close()


و ممکنه با فاصله های خیلی نزدیک این کانکشن توسط توابع مختلف درون برنامه باز بشه . استفاده بشه و بسته بشه.
تا وقتی که دیتابیسم اکسس بود هیچ مشکلی نداشتم. شاید دلیلش این بود که کانکشن سریع باز می شد و کار به سرعت اجرا می شد و سریعا بسته می شد. ولی الان که database ام رو از نوع sql server compact استفاده می کنم . این فاصله های از خیلی نزدیک گذشته و دیگه رسیده به تداخل در کار هم دیگه:اشتباه:

کانکشن باز می شه
شاید از یک تابع دیگه این کانکشن دوباره باز بشه که این خط error می ده.



راه حلی که به نظر خودم رسید این بود که توی برنامه به جای یک کانکشن و command از چندین connection و command استفاده کنم تا دیگه با هم تداخل نداشته باشن.

راه حل شما چیه؟
باید چه کار کنم؟؟

این http://www.forum.98ia.com/images/smilies/-118-.gif تقدیم به شما

Mani_rf
سه شنبه 30 شهریور 1389, 17:38 عصر
یک فکر خیلی ساده، یک شرط کوچک ، خط اول را به این شکل تغییر بده:



If Conn.State = ConnectionState.Closed then Conn.Open



فکر بهتر استفاده از حلقه Whlie :




While Conn.State = ConnectionState.Open

Application.DoEvents()

EndWhile




Conn.Open()




این قدر صبر کنه تا کانکشن قبلی بسته بشه؛ بعد دوباره بازش کنه.



البته برای این که برنامه تو Loop نیوفته میتونی TimeOut در نظر بگیری.

محسن شامحمدی
سه شنبه 30 شهریور 1389, 20:54 عصر
While Conn.State = ConnectionState.Open

Application.DoEvents()
EndWhile


دستتون درد نکنه این مشکل با کدشما حل شد حالا یک مشکل دیگه اومده جای خالیشو پر کرده:گریه:
من این کد رو نوشته بودم که وقتی دیتابیسم access بود به راحتی کار می کرد

cmd.CommandText = "SELECT code from cities where city = ( select city from useradmin)"
cnn.Open()
Dim Code As String = cmd.ExecuteScalar()
cnn.Close()

ولی حالا این expection رو می ده
http://barnamenevis.org/forum/attachment.php?attachmentid=56840&stc=1&d=1285087999

و همونطور که گفتم از sql server ce استفاده می کنم.
منتظر نظرات خوبتون هستم

محسن شامحمدی
چهارشنبه 31 شهریور 1389, 08:51 صبح
دوستان اين طور که من فهميدم.
اين exception به خاطر دستورات sql اشتباه می باشد.

غلامرضا شریفی
چهارشنبه 31 شهریور 1389, 12:43 عصر
cmd.CommandText = "SELECT code from cities where city ='" & شهر مورد نظر كه ميتواند از تكس يا جاي ديگر بگيرد & "'"
از ' بعد از مساوي و بعد از نام شهر حتما استفاده شود

afshinjazi
چهارشنبه 31 شهریور 1389, 13:43 عصر
سلام

تو اكسس رو نميدونم ولي تو SQL من اينطوري Query مي زنم



"SELECT code from cities where city In ( select city from useradmin)"



:تشویق:

محسن شامحمدی
چهارشنبه 31 شهریور 1389, 20:40 عصر
سلام

تو اكسس رو نميدونم ولي تو SQL من اينطوري Query مي زنم



"SELECT code from cities where city In ( select city from useradmin)"



:تشویق:

دستت درد نکنه دوست عزیز
دقیقا مشکل کار همین بود:چشمک:
توی اکسس هم با مساوی کار می کرد هم با in
ولی انگار تو sql server فقط باید از in استفاده کرد.
از راهنمایی خوبت ممنونم
انشاالله جبران کنم:بوس:

Rezahak
چهارشنبه 31 شهریور 1389, 20:53 عصر
یک راه حل راحت تر اینه که connection را close نکنی و وقتی خواستی از برنامه خارج شوی close کنی
البته کلا استفاده از یک Connection در تمام برنامه درست نیست بهتره یک کلاس برای کار با پایگاه داده شدن بنویسید که یک property داشته باشد که connection را برگرداند بعد هر بار می خواهید یک کار با database انجام دهید یک instance از آن ایجاد کنید حالا توی این کلاس هر جور دوست دارید کارهاتون رو handle کنید

afshinjazi
پنج شنبه 01 مهر 1389, 15:53 عصر
دستت درد نکنه دوست عزیز
دقیقا مشکل کار همین بود:چشمک:
توی اکسس هم با مساوی کار می کرد هم با in
ولی انگار تو sql server فقط باید از in استفاده کرد.
از راهنمایی خوبت ممنونم
انشاالله جبران کنم:بوس:
سلام
خوشحالم كه مشكلتون حل شد (خدا رو شكر)