PDA

View Full Version : گرفتن ارور پس از اجرای دستور select



fidelio
سه شنبه 20 مهر 1389, 18:59 عصر
INVALID ATTEMPT TO READ WHEN NO DATA IS PRESENT
عنوان اروری هست که من می گیرم برای کد زیر:


string EditCmd = "SELECT * FROM Customers WHERE CustomerFirstName='{0}'";
EditCmd+=" AND CustomerLastName='{1}'";
EditCmd = string.Format(EditCmd, this.txtbx_Srch_name.Text
, this.txtbx_Srch_LastName.Text);
SQLCmdBuilder EditCust = new SQLCmdBuilder();
SqlDataReader resultreader = EditCust.CmdExecuteReader(EditCmd);
MessageBox.Show(resultreader.HasRows.ToString());
MessageBox.Show(resultreader.FieldCount.ToString() );

if (resultreader.HasRows)
{
groupBox2.Enabled = true;
this.txtbx_Save_Name.Text = resultreader[1].ToString();
this.txtbx_Save_lastName.Text = resultreader[2].ToString();
this.txtbx_Save_TelNum.Text = resultreader[3].ToString();
this.txtbx_Save_DebtMoney.Text = resultreader[4].ToString();
}


جالب این جاست که پس از اجرای دستور executereader مقدار resultreader.hasrows درست و fieldcount مقدار 5 رو بر می گرداند اما نمی دانم مشکل این ارور از کجاست.
کسی میتونه به من کمک بفرماید؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ :عصبانی++: :افسرده:

علیرضا حسن زاده
سه شنبه 20 مهر 1389, 19:05 عصر
شما باید مقدار برگشتی تابع Read رو چک کنید اگه True بود یک رکورد خونده وگرنه رکوردی وجود نداشته که بخونه

Diaco.10727
سه شنبه 20 مهر 1389, 19:32 عصر
سلام دوست خوبم کدت رو اصلاح کردم از کد زیر استفاده کن


string EditCmd = "SELECT * FROM Customers WHERE CustomerFirstName='{0}'";
EditCmd+=" AND CustomerLastName='{1}'";
EditCmd = string.Format(EditCmd, this.txtbx_Srch_name.Text
, this.txtbx_Srch_LastName.Text);
SQLCmdBuilder EditCust = new SQLCmdBuilder();
SqlDataReader resultreader = EditCust.CmdExecuteReader(EditCmd);
MessageBox.Show(resultreader.HasRows.ToString());
MessageBox.Show(resultreader.FieldCount.ToString() );

if(resultreader.Read())
{
groupBox2.Enabled = true;
this.txtbx_Save_Name.Text = resultreader[1].ToString();
this.txtbx_Save_lastName.Text = resultreader[2].ToString();
this.txtbx_Save_TelNum.Text = resultreader[3].ToString();
this.txtbx_Save_DebtMoney.Text = resultreader[4].ToString();
}

mostafa_shoakry
سه شنبه 20 مهر 1389, 19:32 عصر
INVALID ATTEMPT TO READ WHEN NO DATA IS PRESENT
عنوان اروری هست که من می گیرم برای کد زیر:


string EditCmd = "SELECT * FROM Customers WHERE CustomerFirstName='{0}'";
EditCmd+=" AND CustomerLastName='{1}'";
EditCmd = string.Format(EditCmd, this.txtbx_Srch_name.Text
, this.txtbx_Srch_LastName.Text);
SQLCmdBuilder EditCust = new SQLCmdBuilder();
SqlDataReader resultreader = EditCust.CmdExecuteReader(EditCmd);
MessageBox.Show(resultreader.HasRows.ToString());
MessageBox.Show(resultreader.FieldCount.ToString() );

if (resultreader.HasRows)
{
groupBox2.Enabled = true;
this.txtbx_Save_Name.Text = resultreader[1].ToString();
this.txtbx_Save_lastName.Text = resultreader[2].ToString();
this.txtbx_Save_TelNum.Text = resultreader[3].ToString();
this.txtbx_Save_DebtMoney.Text = resultreader[4].ToString();
}
جالب این جاست که پس از اجرای دستور executereader مقدار resultreader.hasrows درست و fieldcount مقدار 5 رو بر می گرداند اما نمی دانم مشکل این ارور از کجاست.
کسی میتونه به من کمک بفرماید؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ :عصبانی++: :افسرده:
من که اروری نمی بینم.
اگه ارورتو بزاری بیشتر کمک می گیری :قلب:

fidelio
سه شنبه 20 مهر 1389, 22:17 عصر
مشکل هنوز باقی است، اما ممنون از تک تک عزیزان!
ببینید دوستان من،
من یک مشتری دارم به اسم "امیر اخوان"، امیر و اخوان رو به ترتیب توی تکست باکس های this.txtbx_Srch_name.Text و this.txtbx_Srch_LastName.Text قرار می دم. بعد می ره بقیه اطلاعات این مشتری رو همراه با نام و نام خانوادگی بازیابی می کنه توی این تکست باکس ها:

this.txtbx_Save_Name
this.txtbx_Save_lastName
this.txtbx_Save_TelNum
this.txtbx_Save_DebtMoney

حالا، من چون دستور select ام یک رکورد داره، می ریزمش توی datareader. حال یک سوال: اساسا چیزی توی اون هست؟ من می گم هست چون fieldcount و hasrows اینو نشون می ده (به ترتیب true و 5). اما چرا اون ارور داده می شه توی دقیقا این خط:

this.txtbx_Save_Name.Text = resultreader[1].ToString();
اگر خالی هست اون reader، چرا؟! و مشکل کجاست عزیزان؟

mohsensaghafi
چهارشنبه 21 مهر 1389, 04:06 صبح
مشکل هنوز باقی است، اما ممنون از تک تک عزیزان!
ببینید دوستان من،
من یک مشتری دارم به اسم "امیر اخوان"، امیر و اخوان رو به ترتیب توی تکست باکس های this.txtbx_Srch_name.Text و this.txtbx_Srch_LastName.Text قرار می دم. بعد می ره بقیه اطلاعات این مشتری رو همراه با نام و نام خانوادگی بازیابی می کنه توی این تکست باکس ها:

this.txtbx_Save_Name
this.txtbx_Save_lastName
this.txtbx_Save_TelNum
this.txtbx_Save_DebtMoney

حالا، من چون دستور select ام یک رکورد داره، می ریزمش توی datareader. حال یک سوال: اساسا چیزی توی اون هست؟ من می گم هست چون fieldcount و hasrows اینو نشون می ده (به ترتیب true و 5). اما چرا اون ارور داده می شه توی دقیقا این خط:

this.txtbx_Save_Name.Text = resultreader[1].ToString();
اگر خالی هست اون reader، چرا؟! و مشکل کجاست عزیزان؟

سلام دوست عزیز.
مشکل خالی بودن rederبه دلیلی هست که دوستمون Diaco.10727 بش اشاره کردن.
دلیلش اینه که شما اصلا این reder رو ()read نکردید که بخواد اطلاعاتی رو به شما بده.
شما به جای دستور


if (resultreader.HasRows)

از دستوری که Diaco.10727 اشاره کردن استفاده کنید


if(resultreader.Read())

در آخر اگر جدولتون 4 تا فیلد داره یادتون باشه که اندیس ها در reder از 0 شروع میشه.
موفق باشید