PDA

View Full Version : پر کردن لیست باکس با datareader



aminkk
یک شنبه 15 شهریور 1388, 12:29 عصر
سلام
من یه کلاس به اسم Bank دارم که توش یه متد برای پر کردن یه لیست باکس دارم:


public class Bank
{
public SqlDataReader Filling()
{
cmd.CommandText="Select empName FROM emp";
cmd.Connection=Conn;
....
SqlDataReader sdr=cmd.ExecuteReader();
return sdr;
}

}

این به قول یکی از بچه ها شبه کد من هستش.
حالا تویه Page برنامه این کد رو نوشتم:


Bank obj=new Bank();
(if obj.Filling().HasRows)
{
while (obj.Filling().Read())
ListBox.Items.add(obj.Filling()["empName"].ToString());
}


اما متاسفانه می گه که هیچ چیزی رو read نمی کنه.
مشکل کجاست؟

aminkk
یک شنبه 15 شهریور 1388, 19:27 عصر
خاصيت autoPostBack هم True هست اما خطا داده ميشه.
كلاً اين كد من درسته؟

svahidm
دوشنبه 16 شهریور 1388, 09:29 صبح
سلام
این تیکه کدی که نوشتی بزرگترین مشکلش اینه که تابع پر کردن رو چندین بار صدا زدی ،با این کار اگه شما 100 رکورد داشته باشی همیشه اولی برمی گردونه ،شما باید قبل از انجام هر کاری نتیجه ی حاصل از متد پرکردن رو به یه datareader نسبت بدی و از اون به بعد همیشه از datareader استفاده کنی .
Bank obj=new Bank();
(if obj.Filling().HasRows)
{
while (obj.Filling().Read())
ListBox.Items.add(obj.Filling()["empName"].ToString());
}
/////
Bank obj=new Bank();
SqlDataReader dr = obj.Filling();
if(dr.HasRows)
{
while (dr.Read())
ListBox.Items.add(dr["empName"].ToString());
}
این قضیه ای که گفتم یه قضیه کلی بود که خیلی از مواقع مشکل بوجود میاره
اما مشکل شما کلا ساختار کده ،شما اگه SqlDataReader رو از تابع قبل از بسته شدن connection بر گردونین که احتمالا الان هم این کار رو کردین یهconnection باز رو رها کردین که این غلطه اگر چه با کدی که گذاشتم اگه بنویسین خطا نمی ده ،اگر هم بعد از بستن connection بیارین که reader بسته میشه و دیگه نمیشه ازش خوند که خطا هم می ده پس بهترین کار اینه که اطلاعات reader رو از طریق یه datatable بر گردونین ،یعنی تابع filling یه dataTable خروجی بده