PDA

View Full Version : سوال: استفاده از DataTable و خطای Attempted to read or write protected memory



atnicden
یک شنبه 22 دی 1392, 19:17 عصر
دوستان سلام.
ابتدا باید بگم که خطای مطرح شده در عنوان رو توی سایت سرچ کردم اما نتیجه ی قابل توجهی دستگیرم نشد و اکثر تاپیکها بی نتیجه مونده بود.
همچنین با جستجویی که در سایتهای فارسی و انگلیسی انجام دادم به نتایجی که در زیر مطرح می کنم رسیدم. در واقع به منشاء مشکل رسیدم ولی دلیلش رو نمیدونم.
من برای کار با دیتابیس اکسس یه کلاس تعریف کردم. این کلاس ظاهرا بدون مشکل کار میکنه و ایرادی نداره.
مشکل زمانی پدیدار میشه که میخوام از کامپوننتهایی مثل OpenFileDialog و یا Microsoft.Interop.Excell و ... استفاده کنم و برنامه با خطای Attempted to read or write protected memory روبرو میشه.

در واقع وقتی من بخشی از توابع اون کلاس رو به کار میبرم و بعد میخوام از این کامپوننتها استفاده کنم با این خطا مواجه میشم.

بخشی از کلاسی رو که تعریف کردم و فهمیدم مشکل از اونه قطه کد زیره:

Public Class DatabaseManagement

Public Shared Function GetDataTable(ByVal DT As DataTable, ByVal tableName As String, Optional ByVal Query As String = "SELECT * FROM %tablename%") As DataTable
Query = Query.Replace("%tablename%", tableName)
Try
Dim adapter As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(Query, conn_C)
adapter.Fill(DT)
GetDataTable = DT
Catch ex As Exception
GetDataTable = Nothing
End Try
End Function

Public Shared Function GetDataTable(ByVal tableName As String, Optional ByVal Query As String = "SELECT * FROM %tablename%") As DataTable
Query = Query.Replace("%tablename%", tableName)
Try
Using adapter As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(Query, conn_C)
Dim theDT As New DataTable
conn_C.Open()
adapter.Fill(theDT)
conn_C.Close()
GetDataTable = theDT
End Using
Catch ex As Exception
GetDataTable = Nothing
End Try
End Function

End Class


نحوه استفاده از کلاس فوق هم به صورت زیره:

Private Function GetUsersList() As Integer
Dim DT As New DataTable
DT = DatabaseManagement.GetDataTable(DT, DataAccess.ColumnNames.Users._TableName)
End Function

خب من وقتی چندبار از تابع GetDataTable استفاده می کنم، بعد که میخوام از کامپوننتها استفاده کنم با اون خطا مواجه میشم. این چندبار هم بستگی به کامپیوتری داره که کد روش اجرا میشه.


حالا سئوال من از شما دوستان اینه که درتوابع GetDataTable که نوشتم چه چیزی رو رعایت نکردم که این مشکل به وجود میاد؟