PDA

View Full Version : بازماندن datareader و ایجاد مشکل



maryam_272
سه شنبه 08 آذر 1390, 14:40 عصر
سلام
من یک سایت طراحی کردم به ادرس www.soghatnews.com
این سایت حدود یک ماهی هست که راه اندازی شده اما مشکلی که داره اینه که گاهی اوقات صفحه بالا نمی آید و حتما باید از طریق دیتابیس درستش کنم و با اجرای یک query اتصالات که باز مانده را ببندم
من همه جا connection هایی را که باز کردم را بستم و همین طور datareader ها را
تنها چیزی که می مونه دیتاست هاست که سراسری تعریف کردم تو سایت
اساتید محترم که با سایتهای بزرگ و پر حجم کار کردن آیا با همچین مشکلی برخورد کردن؟ اگر کردن میشه منو راهنمایی کنن چکار کنم؟
ممنون میشم اگه پاسخ بدهید

Saman Hashemi
سه شنبه 08 آذر 1390, 16:13 عصر
اگر با استفاده از یک کلاس عمل اتصال به بانک انجام بدید نیازی نیست توی برنامه دنبال کانکشن باز بگردید...!

تنها چیزی که می مونه دیتاست هاست که سراسری تعریف کردم تو سایت
این یعنی یه دیتاست از NewItem به برنامه اضافه کردید؟

maryam_272
چهارشنبه 09 آذر 1390, 08:53 صبح
connection هامو توسط یک تابع باز کردم اما هرجا به connection احتیاج داشتم تابع رو صدا زدم پس بعدش باید connection رو می بستم
دیتاست رو هم به همین شکل توسط تابع مقدار دهی می کنم نامش سراسری هست هرجای برنامه که احتیاج به مقداردهی بوده اسم تابع رو صدا زدم
من تا حالا سایتهای مخنلفی طراحی کردم و به همچین مشکلی بر نخورده بودم

Saman Hashemi
چهارشنبه 09 آذر 1390, 13:02 عصر
همون تابع قرار بدید تا بهتر بشه کمکتون کرد...!

maryam_272
چهارشنبه 09 آذر 1390, 14:35 عصر
Public Sub OpenCon(Optional ByVal CloseOldConnection As Boolean = False)
If IsNothing(connection1) Then
connection1= New SqlConnection(My.Settings("scn"))
Else
If CloseOldConnection Or connection1.State = Data.ConnectionState.Broken Then
connection1.Close()
connection1.Dispose()
connection1= New SqlConnection(My.Settings("scn"))
End If
End If
If connection1.State = Data.ConnectionState.Closed Then connection1.ConnectionString = My.Settings("scn")
If connection1.State = Data.ConnectionState.Closed Then connection1.Open()
End Sub


Public Function FillmydataSet(ByVal tbl As String) As Boolean
Try
DataAdapter.MissingSchemaAction = Data.MissingSchemaAction.AddWithKey
If IsNothing(DatasetAsli.Tables(tbl)) = False Then DatasetAsli.Tables(tbl).Clear()
DataAdapter.Fill(DatasetAsli, tbl)
FillmydataSet = True
Catch ex As Exception
'MessageBox.Show("برقراري ارتباط امكان پذير نميباشد" & " " & Chr(13) _
' , "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading)
FillmydataSet = False
End Try
End Function


Public Sub fillmydata(ByVal tbl As String, Optional ByVal StrSqlDigar As String = "")
Try
OpenCon()
If StrSqlDigar = "" Then
DataAdapter = New SqlDataAdapter(strsql, con)
Else
DataAdapter = New SqlDataAdapter(StrSqlDigar, con)
End If
DataAdapter.MissingSchemaAction = Data.MissingSchemaAction.AddWithKey
CommandBuilder = New SqlCommandBuilder(DataAdapter)
If IsNothing(DatasetAsli) Then DatasetAsli = New Data.DataSet
FillmydataSet(tbl)
Catch
Finally
If IsNothing(connection1) = False Then
If connection1.State <> ConnectionState.Closed Then connection1.Close()
End If
End Try
End Sub
هرجا بخوام دیتاستم را پر کنم تابع fillmydata("اسم جدول") را قرار می دهم

Saman Hashemi
چهارشنبه 09 آذر 1390, 15:02 عصر
دوست عزیز کدهاتو بذار داخل تگ VB که قابل خوندن بشه...!
وقتی از SqlDataAdapter استفاده میکنید نیازی به Con.open یا con.close نیست خودش ارتباط با بانک مدیریت میکند...!

maryam_272
چهارشنبه 09 آذر 1390, 16:26 عصر
ببخشید اگه با سیستم ارسال تگ آشنا نبودم و بد ارسال کردم
حالا با توجه به نوع کد نویسی من آیا بازکردن دیتاست میتونه بوجود آورنده این خطا باشه
گاهی وقتا 3 4 روز با سایت کار می کنن و هیچ مشکلی نداره اما گاهی خطا میده