PDA

View Full Version : سوال: مشکل با data reader



myazdani
شنبه 11 آذر 1391, 22:08 عصر
سلام

با این کد از پایگاه داده ام داده استخراج می کنم ولی با وجودی که داده توش هست میگه از خواندن از data reader خالی مجاز نیست. برک پوینت گذاشتم خصوصیت has row رو برابر true نشون می ده ولی به داده ها دسترسی ندارم. اگه کسی می دونه علت چیه راهنمایی کنه لطفا

خسته ام کرده واقعا دیگه

protected


void Button1_Click(object sender, EventArgs e)
{


SqlConnection Con = new SqlConnection();


SqlCommand Cmd = new SqlCommand();


SqlDataReader R;


Con.ConnectionString =

"Data Source=.\\sqlexpress;Initial Catalog=PaperLessSecretariat;Integrated Security=True";


string Str,name;
Cmd.Connection = Con;
Con.Open();
Str =

"Select GroupCode From UserGroup Where StaffCode=1";
Cmd.CommandText = Str;
R = Cmd.ExecuteReader();


int count;
count = R.FieldCount;
name = R.GetString(1);


R.Close();
}

جدولم هم فیلدهاش به ترتیب ایناس:

groupCode از نوع int
groupname از نوع nvarchar(50)
staffcode از نوع int

با این وصف getstring(1( باید درست باشه دیگه؟

Hajivandian
شنبه 11 آذر 1391, 22:55 عصر
سلام،

اینجا رو یه نیگاه کن اول
http://www.akadia.com/services/dotnet_data_reader.html

بعدشم تا جایی که میدونم، قبل از خوندن اطلاعات از DataReader باید متد .Read() اون رو فراخوانی کنی.

myazdani
یک شنبه 12 آذر 1391, 14:49 عصر
از راهنمایی تون ممنونم

به متد read ارتباط نداره . اون یه مقدار بولین برمی گردونه که اتمام خوندن رکوردها رو نشون میده

myazdani
یک شنبه 12 آذر 1391, 15:11 عصر
متن خطا هم اینه:
Invalid attempt to read when no data is present

این خطا رو معمولا چه موقع هایی میده؟؟

Mahmoud.Afrad
یک شنبه 12 آذر 1391, 15:28 عصر
چرا ربط نداره؟ با متد read یک رکورد از دیتابیس درخواست میشه که در صورت دریافت مقدار بازگشتی نیز true خواهد بود. پس متد read رو صدا بزن و در صورتی که true شد مقادیر رو استفاده کن.

myazdani
یک شنبه 12 آذر 1391, 15:49 عصر
حق با شماست

ولی چون در حال تست هستم از اینکه رکورد با شرایط مورد نظر حتما تو جدول وجود داره مطمئن هستم. ضمن اینکه همونطور که تو پست اول عرض کردم موقعی break point گذاشتم مقدار has row برابر true میشه . یعنی از اون جهت مشکلی نیست . ولی نمیدونم چرا موقعی می خوام با متد get بخونمش این خطا رو میده.

تا حالا با همچین چیزی مواجه نشده بودم

Mahmoud.Afrad
یک شنبه 12 آذر 1391, 17:21 عصر
hasrows فقط تعیین میکنه که در صورت اجرای کوئری رکوردی برگشت داده میشه یا نه. ولی برای دریافت رکورد باید متد read اجرا بشه.

myazdani
یک شنبه 12 آذر 1391, 17:28 عصر
متشکرم

اگه امکان داره میشه لطف کنین بگین read رو کجای برنامه بالا باید بذارم؟؟

Mahmoud.Afrad
یک شنبه 12 آذر 1391, 17:36 عصر
جایی که مقدار رو get میکنی رو به اینصورت تغییر بده تا از true بودن هم مطمئن بشی.(از نام فیلد به جای getstring استفاده کنی راحتتری):
if (R.Read())
{
name = Convert.ToString(R["GroupCode"]);
}

myazdani
یک شنبه 12 آذر 1391, 17:50 عصر
محبت کردین

حل شد

دانشمندی که از علمش سود برند از هزار عابد بهتر است. پیامبر اکرم(صلی الله علیه و آله و سلم)