PDA

View Full Version : فراخوانی متدی که SqlDataReader برمی گرداند



resident
سه شنبه 07 اسفند 1386, 14:47 عصر
سلام.
من تو برنامم متدی دارم که خروجی اش شیئی از SqlDataReader است. حالا میخوام تو یه متد دیگه این شیء(دیتاریدر) رو بخونم اما نمیشه . موقع خوندن Exception زیر رخ میده(محل رخ دادن استثناء رو آبی کردم):


Invalid attempt to Read when reader is closed.

نمیدونم چکار کنم که ریدر در این متد باز بشه.کانکشن رو موقع خوندن باز کردم ولی فایده نداره.

اینم متدها:


public void fill_combobox(string subject, ComboBox cb)
{
cb.Items.Clear();

SqlDataReader sdr= s.get_sizes(subject);
cn.Open();
while (sdr.Read() == true)
cb.Items.Add((string)sdr[0]);
sdr.Close();
cn.Close();
cb.Items.Add("افزودن آیتم جدید");

}

public SqlDataReader get_sizes(string subject)
{
cmd.CommandText = "sp_show_size_in_combobox";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Clear();

cmd.Parameters.AddWithValue("@subject", subject);
cn.Open();
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Close();
cn.Close();

return sdr;
}

Masoud_TB
سه شنبه 07 اسفند 1386, 14:52 عصر
به این تاپیک رجوع کنین:

http://barnamenevis.org/forum/showthread.php?t=94296

resident
سه شنبه 07 اسفند 1386, 17:42 عصر
به این تاپیک رجوع کنین:

http://barnamenevis.org/forum/showthread.php?t=94296

مسعود جان این مورد با موردی که یکجا دستور رو اجرا کنی و نتیجشو تو دیتاریدر بریزی و همونجا دیتاریدر رو بخونی فرق میکنه.
تو این مورد ، تو یک متد(get_sizes) دستوری رو اجرا کردم و نتیجشو در دیتاریدر ریختم ، بعد از این دیتاریدر (که خروجی متد get_sizes است)تو متد دیگه ای(fill_combobox) استفاده کردم و میخوام سطرهای اونو تو اون متد بخونم اما نمیشه.

اَرژنگ
سه شنبه 07 اسفند 1386, 19:44 عصر
مسعود جان این مورد با موردی که یکجا دستور رو اجرا کنی و نتیجشو تو دیتاریدر بریزی و همونجا دیتاریدر رو بخونی فرق میکنه.


تو این مورد ، تو یک متد(get_sizes) دستوری رو اجرا کردم و نتیجشو در دیتاریدر ریختم ، بعد از این دیتاریدر (که خروجی متد get_sizes است)تو متد دیگه ای(fill_combobox) استفاده کردم و میخوام سطرهای اونو تو اون متد بخونم اما نمیشه.

http://barnamenevis.org/forum/showthread.php?t=81952

Masoud_TB
چهارشنبه 08 اسفند 1386, 10:34 صبح
مسعود جان این مورد با موردی که یکجا دستور رو اجرا کنی و نتیجشو تو دیتاریدر بریزی و همونجا دیتاریدر رو بخونی فرق میکنه.
تو این مورد ، تو یک متد(get_sizes) دستوری رو اجرا کردم و نتیجشو در دیتاریدر ریختم ، بعد از این دیتاریدر (که خروجی متد get_sizes است)تو متد دیگه ای(fill_combobox) استفاده کردم و میخوام سطرهای اونو تو اون متد بخونم اما نمیشه.


تنها فرقش اینه که دقت نکردی؟

اگر بخواهی که از SqlDataReader اطلاعات بخونی حتما حتما باید Connection و SqlDataReader ت باز باشه ولی شما توی خط آخر نوشتی cn.Close() پس معلومه که جواب نمی ده.

اَرژنگ
جمعه 10 اسفند 1386, 00:53 صبح
تنها فرقش اینه که دقت نکردی؟

اگر بخواهی که از SqlDataReader اطلاعات بخونی حتما حتما باید Connection و SqlDataReader ت باز باشه ولی شما توی خط آخر نوشتی cn.Close() پس معلومه که جواب نمی ده.
http://barnamenevis.org/forum/showthread.php?t=81952