PDA

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



rezaei manesh
یک شنبه 13 آبان 1386, 18:29 عصر
سلام
من یک تابع دارم که اطلاعات رو توسط کامند ها از اس کیو ال می گیرم و درون یک دیتا تیبل لود می کنم . و خروجی این تابع این تیبل خواهد بود حالا من چطور این دیتا ریدر کامند رو ببندم ؟
این کد من هست . در ضمن این کد رو چون درون یک حلقه باید استفاده کنم در دفعات بعدی خطا می ده که دیتا ریدرت بازه و...


Dim cm As SqlCommand = Nothing
Dim Tbl As New DataTable
Try
cm = New SqlCommand(StrQuery, cnndatabase)
cm.CommandType = CommandType.Text
Tbl.Load(cm.ExecuteReader())
Return Tbl

Catch ex As Exception
Return Nothing
Finally
cm.Cancel()
cm.Dispose()
Tbl.Dispose()
End Try



خطا


There is already an open DataReader associated with this Command which must be closed first.

لازم به ذکر هست که من در این تابع متغیری از نوع دیتا ریدر هم ندارم در توابع ای که دارم هم همین مشکل هست چون اونجا نمی تونم دیتا ریدر رو ببندم چون اگه ببندم جدولی هم که به عنوان خروجی می دم صفر می شه و...

whitehat
دوشنبه 14 آبان 1386, 00:37 صبح
من دقیقا نفهمیدم شما بعد از پر کردن DataTable چه نیازی به DataReader دارید، ولی بطور کلی می توانید به صورت زیر آنرا ببندید

cm.close()

rezaei manesh
دوشنبه 14 آبان 1386, 09:06 صبح
سلام دوست عزیز
cm از نوع SqlCommand هست و متدی با نام closeنداره و...
این که من بعد پر کردن دیتا تیبل چه نیازی بع دیتا ریدر دارم در واقع هیچی اما وقتی نمی دونم اونو چطور ببندم چون اصلا مستقیم از دیتا ریدر استفاده نکردم که کد بالا را دوباره نگاه کن ، من از دیتا ریدر استفاده نکردم از exacutereader استفاده کردم و...

whitehat
دوشنبه 14 آبان 1386, 10:59 صبح
فکر کردم cm از نوع DataReader است، با این حساب شما بوسیله Connection String ی که تعریف کردید (cnnDatabase) یک DataReader بازکردید (می تونه یک ExecuteDaraReader باشه) بهتره در جاییکه این کار را کردید Connection را ببندید، و هر جا که لازم دارید باز کنید

hdv212
دوشنبه 14 آبان 1386, 12:14 عصر
فکر کنم از این بتونی بعد از load کردن Tbl استفاده کنی :

cm.ExecuteReader().Close();

rezaei manesh
دوشنبه 14 آبان 1386, 12:35 عصر
نمی شه سر همین خط خطای زیر که همان خطای قبل هست رو می ده


There is already an open DataReader associated with this Command which must be closed first.

hdv212
دوشنبه 14 آبان 1386, 15:14 عصر
خوب یه SqlDataReader جدا بساز و اطلاعات رو توی اون بریز و بعد ببندش.