PDA

View Full Version : باز ماندن ارتباط با بانک اطلاعاتی



pedram_ns
شنبه 05 آذر 1390, 18:11 عصر
با سلام
من ارتباط با بانک اطلاعاتیم رو در یک دستور try می نویسم ولی وقتی که به ارور میرسه دستور close برای بستن ارتباط با بانک اجرا نمیشه و ارتباط باز می مونه.
در حالی که اگر ارور نده خوب بسته میشه.

باید چکار کنم که در صورت بروز ارور هم ارتباط با بانک بسته بشه؟
با تشکر

fakhravari
شنبه 05 آذر 1390, 20:47 عصر
کد بزارین .

pedram_ns
یک شنبه 06 آذر 1390, 09:52 صبح
Try

Dim con As New OleDbConnection(WebConfigurationManager.Connection Strings("ConnectionString").ConnectionString)

Dim cmdtrue As New OleDbCommand("select id,active from company where usr=@usr and psw=@psw", con)
cmdtrue.Parameters.AddWithValue("@usr", User)
cmdtrue.Parameters.AddWithValue("@psw", pass)
con.Open()

Dim reader As OleDbDataReader
reader = cmdtrue.ExecuteReader()
reader.Read()
Dim userid As String = reader("id").ToString
Dim active As String = reader("active").ToString
reader.Close()

con.Close()

Catch ex As Exception
loginlbl.Visible = True
loginlbl.Text = "نام کاربری و یا رمز ورود نادرست است."
End Try

مثلا توی این کد اگر نام کاربری و پسورد درست نباشه دستور read ارور میده که در دستور try هست و اون کده قسمتCatch اجرا میشه و دیگه دستور con.close اجرا نمیشه و ارتباط باز میمونه

Saman Hashemi
یک شنبه 06 آذر 1390, 11:34 صبح
عموما توی دستور finally ارتباط میبندن که مطمئن باشید در هر صورتی ارتباط قطع میشه بعدم دستور read توی حلقه یا if چک کنید که اگه خالی بود دوخط بعد اجرا نشه...!

fakhravari
یک شنبه 06 آذر 1390, 11:40 صبح
با سلام
من vb کار نکردم . ولی خودم دستور con.Close() را بعد از Catch می گذارم که باعث میشه بعد از هر دستور بسته شه
در مورد finally سرچ کن

pedram_ns
یک شنبه 06 آذر 1390, 15:06 عصر
عزیزان طبق این کد من اگر دستور con.close رو درون catch یا finally بنویسم که ارور میگیرم.

اگر هم بخوام دستور close رو بعد از catch بذارم باید دستور ارتباط با دیتایس رو هم قبل try بذارم این مشکلی نداره؟

Saman Hashemi
یک شنبه 06 آذر 1390, 16:14 عصر
شما باید SqlConnection خارج try تعریف کنی و داخل try باید new کنی...!
SqlConnection con;
try
{
con = new SqlConnection();
}
catch
{
}
finally
{
con.close()
}

farhud
یک شنبه 06 آذر 1390, 17:16 عصر
شما تعریف رشته اتصال را قبل از try انجام بده و بعد از catch هم آن را ببند:



Dim con As New OleDbConnection(WebConfigurationManager.Connection Strings("ConnectionString").ConnectionString)
con.open()
try
{

}
catch
{

}
con.close()

Saman Hashemi
دوشنبه 07 آذر 1390, 07:23 صبح
شما تعریف رشته اتصال را قبل از try انجام بده و بعد از catch هم آن را ببند:



Dim con As New OleDbConnection(WebConfigurationManager.Connection Strings("ConnectionString").ConnectionString)
con.open()
try
{

}
catch
{

}
con.close()

دوست عزیز این کد اشتباه است چون اگه کانکشن باز نشه ارور قابل کنترل نیست...!

farhud
دوشنبه 07 آذر 1390, 11:39 صبح
دوست عزیز این کد اشتباه است چون اگه کانکشن باز نشه ارور قابل کنترل نیست...!

در این کد کانکشن باز میشه. در خط سوم. در پایان هم بسته میشه.

Saman Hashemi
دوشنبه 07 آذر 1390, 11:46 صبح
در این کد کانکشن باز میشه. در خط سوم. در پایان هم بسته میشه.
دوست عزیز کانکشن تغییر بده یا پاک کن بعد ببین ارور کنترل میشه یا نه...!
همیشه قسمتی که احتمال میدید امکان داره خطا بده باید بذارید توی try حالا چون کانکشن شما همیشه درست بوده احساس میکنید که کد درسته در حالی اگه کانکشن به هر دلیلی برقرار نشه (مثلا سروری که SQL روی آن هست از دسترس خارج شه) اروری که برنامه شما میده قابل کنترل کردن نیست...!

farhud
دوشنبه 07 آذر 1390, 12:29 عصر
دوست عزیز کانکشن تغییر بده یا پاک کن بعد ببین ارور کنترل میشه یا نه...!
همیشه قسمتی که احتمال میدید امکان داره خطا بده باید بذارید توی try حالا چون کانکشن شما همیشه درست بوده احساس میکنید که کد درسته در حالی اگه کانکشن به هر دلیلی برقرار نشه (مثلا سروری که SQL روی آن هست از دسترس خارج شه) اروری که برنامه شما میده قابل کنترل کردن نیست...!

اِ؛ راست میگی ها؛ چه جالب. تا حالا با این مشکل برنخورده بودم.