PDA

View Full Version : سوال: مشکل در هنگام کار با دیتابیس SQL



bitroo
پنج شنبه 03 مهر 1393, 18:18 عصر
سلام
یخ لحظه این کد رو نگاه کنید:

ds = new DataSet();
SqlCommand cmd = new SqlCommand("DELETE FROM Targets WHERE Id=" + code);
cmd.Connection = con;
cmd.ExecuteReader();
این کد رو برای یه تابع نوشتم
وقتی که تابع رو برای بار دوم اجرا می کنم، خطا می ده که یه فرمان هنوز بازه و باید بسته بشه
یه راهش این هست که کانکشن رو ببندم و دوباره باز کنم اما فکر کنم بهینه نباشه و همچنین پیچیدگی کار رو بالا می بره
راه دیگه ای نیست؟

programer1389
پنج شنبه 03 مهر 1393, 18:38 عصر
سلام
یخ لحظه این کد رو نگاه کنید:

ds = new DataSet();
SqlCommand cmd = new SqlCommand("DELETE FROM Targets WHERE Id=" + code);
cmd.Connection = con;
cmd.ExecuteReader();
این کد رو برای یه تابع نوشتم
وقتی که تابع رو برای بار دوم اجرا می کنم، خطا می ده که یه فرمان هنوز بازه و باید بسته بشه
یه راهش این هست که کانکشن رو ببندم و دوباره باز کنم اما فکر کنم بهینه نباشه و همچنین پیچیدگی کار رو بالا می بره
راه دیگه ای نیست؟
سلام
اگه خطا را میگذاشتید بهتر بود

bitroo
پنج شنبه 03 مهر 1393, 20:21 عصر
There is already an open DataReader associated with this Command which must be closed first.

این خطا رو به صورت RunTime میده

_4rm4n_
پنج شنبه 03 مهر 1393, 21:20 عصر
سلام
اول اینکه اون دیتاست رو برای چی تعریف کردید ؟!
دوم اینکه اول از همه با کد con.opne() کانکشین رو open کنید و در آخر از همه بعد از execute شدن کامند با con.close() کانکشین رو ببندید
موفق باشید /.

bitroo
پنج شنبه 03 مهر 1393, 21:26 عصر
سلام
اول اینکه اون دیتاست رو برای چی تعریف کردید ؟!
دوم اینکه اول از همه با کد con.opne() کانکشین رو open کنید و در آخر از همه بعد از execute شدن کامند با con.close() کانکشین رو ببندید
موفق باشید /.
اون دیتاست برای قسمت های بعدی هست
من در ارسال اول گفتم که قبلا کانکشن رو می بستم و دوباره باز می کردم
اما این راه جل ایده آل هست؟ یعنی راه جل بهتری نیست؟
بستن و دوباره باز کردن کانکشن بهینه و هست؟ سرعت نرم افزار رو کم نمی کنه؟

mz6488
پنج شنبه 03 مهر 1393, 21:59 عصر
اما این راه جل ایده آل هست؟ یعنی راه جل بهتری نیست؟
بستن و دوباره باز کردن کانکشن بهینه و هست؟ سرعت نرم افزار رو کم نمی کنه؟

سلام.اگه یه سری دستور دارین بهتره دستورات رو به صورت رشته یه جا بفرستین به sql در این صورت شما یه بار به دیتابیس وصل میشید

danialafshari
جمعه 04 مهر 1393, 00:39 صبح
فکر می کنم باید کانکشن رو Open و Close کنید

programer1389
جمعه 04 مهر 1393, 12:05 عصر
سلام.اگه یه سری دستور دارین بهتره دستورات رو به صورت رشته یه جا بفرستین به sql در این صورت شما یه بار به دیتابیس وصل میشید

سلام دوست عزیز این بدتری نوع است که باعث مشکلاتی مثل تزریق درونی در sql server میشه و جلو گیری ازاون performance یا کارایی را کم میکنه

programer1389
جمعه 04 مهر 1393, 12:22 عصر
There is already an open DataReader associated with this Command which must be closed first.

این خطا رو به صورت RunTime میده


ExecuteReader
همون طور كه از اسمش برمياد اين دستور براي خواندن اطلاعات به صورت ReadOnly و ForwardOnly مورد استفاده قرار ميگيره. خروجي اين دستور يك object از جنس كلاس SqlDataReader هست كه اصولا براي اين منظور ساخته شده. بسيار سريع و در مواقع خواندن كاملا پر كاربرد مي باشد.نكته اي كه بايد بهش توجه داشته باشين اينه كه وقتي دارين اطلاعات رو مي خونين نمي تونين كانكشنتون رو ببنديد و در حالت پيشفرض اين كاننكش تا تمام شدن خواندن اطلاعات براي ديگران قابل استفاده نيست.
به اینجا سر بزنیدhttp://behrozdabashi.blogfa.com/post-5.aspx

cmd.ExecuteNonQuery(); را نمتونید استفاده کنید؟

programer1389
جمعه 04 مهر 1393, 12:28 عصر
فکر می کنم باید کانکشن رو Open و Close کنید
دقیقا همینطوره چون کانکشن تا پایان عملیات لاک میشه