PDA

View Full Version : اجرای یک دستور select ساده داخل حلقه مربوط به DataReader



odiseh
پنج شنبه 26 دی 1387, 16:47 عصر
سلام
من یک جای برنامه دستور ExecuteReader رو اجرا کرده ام که نتیجه اش یک DataReader است.
حالا داخل حلقه DataReader ام، یعنی while dr.Read ، باید دستور Select هم اجرا کنم ولی برنامه بهم Error میده و میگه :

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

لطفا منو راهنمایی کنید.

علیرضا مداح
جمعه 27 دی 1387, 11:35 صبح
سلام دوست عزیز،
شیء IDbConnection ی که شما برای اجرای دستور Select در شیء IDbCommand از آن استفاده می کنید، در حال استفاده توسط IDataReader می باشد، همانطور که می دانید IDataReader به صورت Connected عمل می کند، پس برای پیمایش در IDataReader نیاز به یک IDbConnection باز دارید،
راه حل: برای اجرای IDbCommand مربوط به عملیات Select، شما می بایست یک IDbConnection مجزا تعریف کنید،
در صورت امکان، سناریوی خود را برای انجام این عمل شرح دهید تا شاید بتوان راه حل بهتری پیشنهاد داد،/

odiseh
جمعه 27 دی 1387, 15:56 عصر
ممنون از توجه تون.
--ابتدا با يك دستور ExecuteReader يك DataReader رو پر مي كنم.
--در داخل حلقه while dr.Read به ازاء تك تك ركورد هايي كه داخل DataReader هستند يك پروسه رو call مي كنم.
-- داخل پروسه يكي از كارهايي كه مي بايست انجام بدم select اي است كه با مراجعه به جدول ديگه اطلاعات مورد نيازم رو مي خواند.

و دقيقا موقع انجام اين Select هست كه error اي رو كه در پست قبلي نوشتم throw مي كنه. آيا ميشه سناريو ي بهتري براي اينكار نوشت ؟

علیرضا مداح
جمعه 27 دی 1387, 18:20 عصر
این مشکل را با توجه به راه حلی که ارائه دادم، میتوایند حل کنید،

اما به طور مثال می توانید یک SP در SQL Server بنویسید که تمام اطلاعات مورد نیاز شما را در یک Query برگرداند تا نیازی به اجرای یک SELECT برای تک تک مقادیر نباشد،
با شرح دقیق تر سناریو بهتر می توان راهنمایی کرد،/

Morvaride80
جمعه 18 آذر 1390, 11:54 صبح
با سلام و تشکر
من با همین مشکل برخورد کردم ولی نمیتونم از Query استفاده کنم چون همه اطلاعات داخل یک Table هستش. یعنی میخوام رکوردی رو انتخاب کنم که مثلا سه حرف اول اسمش با حروف اول رکوردی که دیتا ریدر میخونه یکی باشه. در ضمن این رکورد منحصر بفرده یعنی دو تا رکورد بر نمیگردونه. - اگر هم دوستان میدونن چطوری میشه از Query استفاده کرد ممنون میشم راهنمایی کنن.